笔记参考博客:www.cnblogs.com/lijingran/c…
Map
- 遍历HashMap几种方式 entrySet keySet HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式
- 区别1: HashMap可以存放 null。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出。 Hashtable不能存放null
- 区别2: HashMap不是线程安全的类 可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap(它是HashTable的替代)。 Hashtable是线程安全的类
- LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序。遍历速度只和实际数据有关,和容量无关 如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好
Colletion
-
实现Comparable接口 在类里面提供比较算法 Collections.sort就有足够的信息进行排序了,也无需额外提供比较器Comparator
-
Collection是 Set List Queue和 Deque的接口
-
Set中的元素 重复判断标准是:
- 如果hashcode相同,再比较equals,如果equals相同,则是相同数据,否则是不同数据 如果hashcode不一样,就是在不同的坑里,一定是不重复的 如果hashcode一样,就是在同一个坑里,还需要进行equals比较
- 如果equals一样,则是重复数据 如果equals不一样,则是不同数据。 HashSet是作为Map的key而存在的
-
HashSet自身并没有独立的实现,而是在里面封装了一个Map. HashSet是作为Map的key而存在的 而value是一个命名为PRESENT的static的Object对象,因为是一个类属性
-
HashSet: 无序 LinkedHashSet: 按照插入顺序 TreeSet: 从小到大排序
-
ArrayList 容器的容量"capacity"会随着对象的增加,自动增长 add 有两种用法 第一种是直接add对象,把对象加在最后面 第二种是在指定位置加对象 indexOf与contains一样,判断标准是对象是否相同、 remove set用于替换指定位置的元素 toArray可以把一个ArrayList对象转换为数组。 clear 清空一个ArrayList
-
除了实现了List接口外,LinkedList还实现了双向链表结构Deque,可以很方便的在头尾 插入 查看 删除 数据 addLast addFirst getFirst removeLas LinkedList 除了实现了List和Deque外,还实现了Queue接口(队列)。 Queue是先进先出队列 FIFO,常用方法: offer 在最后添加元素 poll 取出第一个元素 peek 查看第一个元素
-
查找符合条件的对象: List的做法是对每一个进行挨个遍历 HashMap比如要查找annie,首先计算"annie"的hashcode是1008,根据1008这个下标,到数组中进行定位,发现1008这个位置有两个英雄,那么就对两个英雄的名字进行逐一比较(equals),因为此时需要比较的量就已经少很多了,很快也就可以找出目标英雄
顺序表,链表,哈希表,二叉树
集合与泛型
1、List ,List<?> 与 List 有区别吗? List是集合类型的一种 List 变量可以接受任何泛型的变量 List<?> 是一个泛型,在没有赋值之前,是可以接受任何集合的赋值的
2、List<? extends T> a ,可以把 a 及其 a 的子类赋给 a,从 a 里取的元素都会被强制转换为 T 类型,不过需要注意的是,不能向 a 添加任何除 null 外是元素。
3、List<? super T> a ,可以把 a 及其 a 的父类赋给 a,从 a 里取的元素都会被强制转换为 Object 类型,不过需要注意的是,可以向 a 添加元素,但添加的只能是 T 及其子类元素。
实际上在 Java 的泛型中,泛型只存在于源码中,在编译后的字节码中,泛型已经被替换为原生类型了,并且在相应的地方插入了强制转换的代码。
集合与数组转化
- 数组转换为集合 这个返回的 ArrayList 实际上是 Arrays 的一个内部类。该内部类也是十分简单,和真实的那个 ArrayList 没得比。而且这个假的 ArrayList 是直接 引用原数组的。 List list = new ArrayList<>(Arrays.asList(arr));
- 集合转数组