结合对象常用的子类对象存在规律
前缀为数据结构名 后缀为所属体系名
ArrayList:数组结构 看到数组 查询快 看到list 就知道可以重复。可以增删改查
LinkedList:链表结构 增删快
存入set 的每个元素都必须是唯一的,必须定义equals()方法以确保唯一性
HashSet:哈希表结构 查询速度更快(就要想到必须覆盖equals和hascode) 不保证有序 看到set 知道不可重复
LinkedHashSet:链表+哈希表 可以实现有序
TreeSet:二叉树 可以排序 一种是自然排序comparable 一种是比较器排序comparator
foreach 增强for循环 只能遍历集合元素和数组元素
for(元素类型变量:集合or数组)
package it.collection.set.test;
/*对多个字符串按照长度排序 由短到长(不重复)
* 1 多个字符串 需要容器储存
* 2 选择容器 不重复所以选set
* 3 需要排序 选择TreeSet 不是自然排序 自定义比较器*/
/*对多个字符串按照长度排序 由短到长(重复)
1 容器 数组
* */
import it.collection.Comparator.ComparatorByLength;
import java.util.Set;
import java.util.TreeSet;
public class TreeSet_Test2 {
public static void main(String[] args) {
Set set=new TreeSet(new ComparatorByLength());
set.add("haha");
set.add("hahaw");
set.add("aasda");
set.add("zccv");
set.add("hxzvzv");
set.add("haha");
for (Object o :set
) {
System.out.println(o);
}
System.out.println("---------------------");
sortSringByLength();
}
public static void sortSringByLength(){
String[] strings={"haha","hehe","asdas","zccxqasd","haha"};
ComparatorByLength cBL=new ComparatorByLength();
for (int i = 0; i <strings.length-1; i++) {
for (int j = i+1; j <strings.length; j++) {
if (cBL.compare(strings[i],strings[j])>0)
swap(strings,i,j);
}
}
for (String s:strings
) {
System.out.println(s);
}
}
private static void swap(String[] strings, int i, int j) {
String s=strings[i];
strings[i]=strings[j];
strings[j]=s;
}
}
比较器
public class ComparatorByLength implements Comparator {
@Override
public int compare(Object o1, Object o2) {
String s1= (String) o1;
String s2=(String)o2;
int temp=s1.length()-s2.length();
// if (temp>0)return -1; 长 返回-1的意识是s1小于s2 实际上s1比s2长 做的目的 实现从大到小
// (-1放左面 1放右边 0相等)
// if (temp<0)return 1;同时作用 比小的返回1
return temp==0? s1.compareTo(s2):temp;
}
}
网友评论