一、TreeSet
最大的特点就是可以排序区别于HashSet
运行机制
public class TreeSet01 {
@SuppressWarnings("all")
public static void main(String[] args) {
//当我们使用无参构造器创建treeset时没有顺序
//如果希望添加的元素,按照 字符串大小来排序
//使用TreeSet提供的构造器可以传入一个比较器(匿名内部类)
//指定排序规则
TreeSet treeSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
//调用了字符串的比较方法
return ((String)o2).compareTo((String) o1);
}
});
treeSet.add("jack");
treeSet.add("ai");
treeSet.add("bi");
treeSet.add("xi");
System.out.println(treeSet);
}
}
comparator底层实现(实际上底层是TreeMap的实现)
Comparator<? super K> cpr = comparator;
if (cpr != null) {
do {
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
else {
if (key == null)
throw new NullPointerException();
@SuppressWarnings("unchecked")
Comparable<? super K> k = (Comparable<? super K>) key;
do {
parent = t;
cmp = k.compareTo(t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
Entry<K,V> e = new Entry<>(key, value, parent);
if (cmp < 0)
parent.left = e;
else
parent.right = e;
fixAfterInsertion(e);
size++;
modCount++;
return null;
}
二、TreeMap
和TreeSet不同的就是赋值是k-V的形式
public class TreeMap01 {
public static void main(String[] args) {
TreeMap treeMap = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String)o1).compareTo((String) o2);
}
});
treeMap.put("jack","n1");
treeMap.put("n2","ai");
treeMap.put("n3","bai");
treeMap.put("n4","tom");
System.out.println(treeMap );
}
}
三、 Collections工具类
介绍说明
方法介绍
reverse()
翻转list集合
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
Collections.reverse(list);
System.out.println(list);//[rose, milan, tom, jack]
}
}
shuffle()
随机打乱集合
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
Collections.shuffle(list);//[milan, jack, rose, tom]每次都不一样
// Collections.reverse(list);//[rose, milan, tom, jack]
System.out.println(list);
}
}
sort()
自然顺序排序按照升序也可以在后面加入匿名内部类来实现重写方法
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
Collections.sort(list);//[jack, milan, rose, tom]
// Collections.shuffle(list);//[milan, jack, rose, tom]每次都不一样
// Collections.reverse(list);//[rose, milan, tom, jack]
System.out.println(list);
}
}
swap(List list , int i , int j)
在集合list中把下标为i和j的元素交换
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
Collections.swap(list,0,1);//[tom, jack, milan, rose]
// Collections.sort(list);//[jack, milan, rose, tom]
// Collections.shuffle(list);//[milan, jack, rose, tom]每次都不一样
// Collections.reverse(list);//[rose, milan, tom, jack]
System.out.println(list);
}
max(list)(min)
找到自然排序的集合中最大(小)的那个元素
可以重写来自定义方法
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
System.out.println(Collections.max(list));//tom
// Collections.swap(list,0,1);//[tom, jack, milan, rose]
// Collections.sort(list);//[jack, milan, rose, tom]
// Collections.shuffle(list);//[milan, jack, rose, tom]每次都不一样
// Collections.reverse(list);//[rose, milan, tom, jack]
System.out.println(list);
}
frequency(List list,Object)
查找出现的次数
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
System.out.println(Collections.frequency(list,"tom"));//1
copy(newlist,oldlist)
拷贝集合,需要注意新集合大小要大于等于老数组
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
ArrayList arrayList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
arrayList.add("");
}
Collections.copy(arrayList,list);//为了实现拷贝不抛出异常需要先给arrayList赋值
System.out.println(arrayList);
replaceAll(list,oldobj,newobj)
替换数据
public class Collections01 {
@SuppressWarnings("all")
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("tom");
list.add("milan");
list.add("rose");
Collections.replaceAll(list,"tom","Tom");//[jack, Tom, milan, rose]