Map、Set、List

20190529160210901.png

1、Map:Key-Value

HashMap

jdk1.8之前:数组+链表 jdk1.8起:数组+链表/红黑树 假如红黑树是为了提高查询速度的。 数组结构:把元素进行了分组(相同哈希值是一组)。初始容量为16 链表/红黑树:吧相同的哈希值的元素连接到一起。当链表长度大于8时,转换为红黑树。 默认长度16 允许null值 负载因子为0.75 HashTable

基于哈希表实现 安全 不允许null值 默认大小是11 oldsize*2+1 TreeMap 有序的 基于红黑树实现

2、Set:不包含重复元素、底层是一个哈希表、、允许有null值

HashSet:不能保证顺序

HashSet<String> hashSet = new HashSet<>();
for (int i = 0; i < 100; i++) {
    hashSet.add(String.valueOf(i));
}
hashSet.remove("1");
System.out.println(hashSet.contains(1));
Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
hashSet.clear();

LinkedHashSet:采用双向链表保证顺序

LinkedHashSet<String> hashSet = new LinkedHashSet<>();
for (int i = 0; i < 100; i++) {
    hashSet.add(String.valueOf(i));
}
hashSet.remove("1");
System.out.println(hashSet.contains(1));
Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
hashSet.clear();

TreeSet:可以排序

Random r = new Random(1);
TreeSet<User> hashSet = new TreeSet<>();
for (int i = 0; i < 100; i++) {
    int ran1 = r.nextInt(100);
    User user = new User(ran1);
    hashSet.add(user);
}
hashSet.comparator();
Iterator<User> iterator = hashSet.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next().getAge());
}
hashSet.clear();

3、List:有序的集合、带有索引、允许有重复值、可以存储null

ArrayList

底层实现:数组:查询快,增删慢 ArrayList非线程安全 扩容1.5倍,并且有数据拷贝。定义大小的时候要慎重

LinkedList

底层实现:是一个双向链表:查询慢,增删快。 可以存储null值 LinkedList非线程安全

Vector

底层实现:数组:查询快,增删慢 线程安全


已有 0 条评论

    欢迎您,新朋友,感谢参与互动!