Set set = new TreeSet();
set.add(1)
set.remove(1)
;for (Object o : set){}
Set set = new HashSet();
class User implements Comparable {
int age;
public User(int age) {
this.age = age;
}
@Override
public int compareTo(Object o) {
// this 是 要添加的元素
// o 是集合中的元素
if (o instanceof User) {
User oldUser = (User) o;
// 返回0 说明 相等,则不添加
// 返回大于0,说明要添加的元素,比集合中的大,往后放
// 返回小于0,说明要添加的元素,比集合中的小,往前放
return this.age - oldUser.age;
}
return 0;
}
}
虽然我们可以自己写排序规则但当我们用系统提供的类时并不能修改的他的排序方法, 那么我们想要进行逆序排序的时候怎么办. 这时候就出现了Comparator
或者我们要存的数据没有实现 Comparable 也需要使用 Comparator.
以上两种场景,可以使用 comparator接口解决 , 只要使用comparator之后,不管原来是否有comparable 都会按照comparator来进行排序 ( comparator 优先级大于 comparable )
Set set = new TreeSet(new Comparator(){
@Override
public int compare(Object o1, Object o2) {
// o1 是要添加的元素
// o2 是集合中的元素
// 返回0 说明相同
// 返回大于0 , 往后放
// 返回小于0 , 往前放
return (Integer)o2 - (Integer)o1;
}
})
List list = new ArrayList();
Collections.sort(list); // 可以直接进行排序
Collections.sort(list, new Comparator(){ //也可以把 要排序的集合和 比较器类一起传入
@Override
public int compare(Object o1, Object o2) {
return (Integer)o2 - (Integer)o1;
})
那么我们的Map 与 set 之前有什么区别呢 set我们只保存值 而 Map我们通常是通过键值对的形式进行保存 ( 保存映射关系 ).
Map特性 : 无序,key不可重复,value可重复, 保存的是key和value键值对
Map 的继承家族
哈希表数组的默认长度 ( 16 )
最大容量
加载因子 ( 到多少扩容大概 )
红黑树节点小于 6 个就转换为链表
还有个64
HashMap map = new HashMap();
map.put(key, value)
map.get(key)
map.remove(key);
map.size();
map.containsKey("");
map.containsValue("");
map.isEmpty();
map.clear();
map.values();
Set set = map.keySet();
Set entrys = map.entrySet();
Set set = map.keySet();
for (Object object : set) {
System.out.println(object+" : "+map.get(object));
}
TreeMap map = new TreeMap();
List list = new ArrayList();
list.add(1);
list.add("a");
for (Object object : list) {}
List<String> strs = new ArrayList<String>();
strs.add("a");
strs.add(1); // 此时会报错, 只能传入String类型
for (String string : strs) {}
MyClass<string> my = new MyClass<String>();
my.m1(1); //此时就只能传入字符串 传入1时就会报错
class MyClass<T> {
public void m1 (T t){
System.out.print(t);
}
}