集合中存储的不能是基本类型,
集合中存储的不是对象,而是对象的内存地址,或者说是对象的引用
List list = new ArrayList();
Collections.synchronizedList(list); //这样list就变成线程安全的了。
泛型是在编译期间使用的,运行期间没有用
List<String> list = new ArrayList<>(); //JDK8之后,后面的<>内不需要写类型了。<>钻石表达式
自定义泛型,里面的类型随便写
增强for循环 foreach
放到HashSet中的元素实际上是放到HashMap的key部分了。
HashMap的原理
Node[] table; //一维数组
Node{
Object k;
Object v;
int hash;
Node next; }
向map集合中存放数据或者获取数据,都是先调用K部分的hashcode方法,再调用equals方法。
如果hashcode不同,则直接存入数组,如果hashcode相同,则调用equals,去单向链表中查询;
放到HashMap的K部分的和放到HashSet里面的对象需要重写hashCode和equals方法。
Properties setProperties getProperties
TreeSet 放到TreeSet集合中的类型 需要实现 java.lang.Comparable<> 接口
或者新建一个类实现 Comparator接口,泛型里面存放要放入到Treeset集合中的类型
二叉树的结构图
或者实现
Comparator 接口 ------》 比较器
class Stucompa implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.getAge()-o2.getAge(); } }
TreeSet<Student> treeset = new Treeset<>(new Stucompa());
TreeSet 放进去之后,再拿出来就是根据比较规则排好序的
TreeMap放进去之后,再拿出来就是根据比较规则排好序的
对list集合中的数据进行排序 Collections.sort(list); 则list存入的数据也需要实现Comparable接口。
Set放入数据后,要想排序,则可以使用List转换 如
Set<String> set = new HashSet<>();
List list = new ArrayList<>(set);// 把set的数据放入到list中去
Collections.synchronizedList Collections.synchronizedSet Collections.synchronizedMap,将参数变为 线程安全的。
HashSet,HashMap中的泛型类需要重写 hashCode和equals方法。
TreeSet,TreeMap中的k,的泛型类《K》需要实现 Comparable接口,或者用一个类实现Comparator接口,Comparator接口中的泛型是泛型类<K>
Map.Entry<String,Integer> m = map.entryset();