集合框架
Collection
List
ArrayList(多线程,数组,查询快,增删慢)
为什么叫可变长度数组:默认长度10,长度超过10时new新数组50%延长,新数组的size=15,将原来的数组装进新数组,再将新元素放入
LinkList(链表,查询慢,增删快)
Vector(单线程,数组,查询慢,增删慢,被淘汰)
默认长度10,长度超过10时new新数组100%延长,新数组的size=20
Set
HashSet
大神博客
底层数据结构:数组+链表,无序不重复
如何判断是否是同一元素:先判断hashcode,再判断eqals(都相同则认为是同一元素覆盖)
源码是用hashMap实现的
HashMap的键作为HashSet的值
HashMap的value,源码中PRESENT = new Object();就是new Object()作为值TreeSet
底层数据结构是二叉树(是否是平衡二叉树,不知道),有序不重复
如何判断是否是同一元素:compareTo(Object obj)方法返回0,即相等,就认为是同一对象就不存入
可以将元素排序(根据Comparable排序)
如何才能具有比较性
1.让元素具有比较性:存入的对象元素须实现Comparable<T>接口覆盖compareTo(Object obj)方法;
2.让容器具有比较性:定义类如MyComparator,实现Comparator接口覆盖compare(Object o1,Object o2),使用构造函数TreeSet(new MyComparator())创建容器
3.当两种情况都存在时,以2为主
Map
HashTable
底层是hash表,不能存入null键null值,线程同步的
HashMap
底层是hash表,能存入null键null值,非线程同步的
put方法如果键相同,会覆盖原有的值,并返回原有值
大神博客:HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你TreeMap
底层是二叉树,非线程同步。可用于给map集合中的键进行排序(同TreeSet)
Collections
操作集合的工具类
Arrays
用于操作数组的工具类