Java集合需要注意的地方

(一)

1.集合大致分为四类:Set List Queue Map

2.集合类也被称为容器类
3.区别于数组,集合类只能保存对象(对象的引用值)
4.java集合类主要由俩个接口派生:Collection Map
5.Set(无序集合),List(有序集合),Queue都是Collection的子接口
6.Java所有集合大致可以分为三类:Set类似于一个罐子,把一个对象放入Set中时它无法记住放入的顺序;

  List像一个数组,可以记住每次添加元素的顺序,而且它的长度可变;

  Map也像一个罐子,无法记住添加顺序,但是它的每个数据项都是由俩个值组成;

(二)

7.可以直接使用下表来访问List中的元素;可以根据每个元素的key值来访问Map中的元素;只能通过元素本身来访问Set中的元素;
8.ArrayList 和 HashSet 虽然实现类不同但是他们可以使用相同的add clear 方法
9.所有的Collection类都实现了toString()方法
10.Iterable接口是Collection接口的父接口,所以所有的Collection类都可以使用Iterable接口的forEach方法
11.上述forEach方法的参数为一个Consumer接口(函数式接口),所以可以直接使用lambda表达式遍历Collection类
12.Iterator对象仅能依存于Collection对象,它的对象可用于遍历Collection对象,但是只是值传递的,所以不能修改Collection集合中的元素
   但是可以使用remove()方法删除试一次next方法返回的集合元素
   使用实例:book(HashSet类);得到book的Iterator对象:Iterator it = book.iterator()
13.java5提供了forEach方法遍历集合元素:for(Object obj : books)被遍历集合同样不能被修改
14.java8 为Collection对象新增了removeIf()方法 该方法参数为Preddicate函数式接口 因此可以使用lambda表达式
   例:books.removeIf(ele->((String)ele.length(),10))

15.不能向set集合中添加相同的元素,会报错

(三)

16.HashSet按Hash算法来存储集合中的元素,因此就有很好的存取和查找性能
17.HashSet 并不是线程安全的
18.HashSet判断俩个元素是否相同是先判断equals方法,再判断hashCode方法
19.LinkHashSet是HashSet的子类 使用链表来维护元素的次序 所以他可以根据元素的添加顺序来遍历集合
20.TreeSet是SortedSet接口的实现类,从名字可以看出来该类是通过元素大小来排序的,并不是添加顺序
21.TreeSet类中的元素必须实现Comparable接口,该接口中定义了compareTo()方法,TreeSet也是通过该类来排序的
22.java已经为一些常用类实现了Comparable接口,例如:String Time Date Character 等
23.使用compareTo()方法要求相同类型,这就导致TreeSet里的对象都是同一个类的实例
24.不能将俩个相等的对象放到TreeSet里,是否相等取决于compareTo()方法(即返回0)
25.如果后续程序更新了TreeSet中元素这不会使排序发生改变
26.TreeSet中某个元素被修改为与另一个元素相同是这俩个元素都不能被删除

27.在创建TreeSet时可以与一个Comparator函数式接口相关联来实现制定排序

(四)

28.List集合(接口)为一个有序的,可重复的,集合中每个元素都其相应的顺序索引的集合,其索引默认根据添加顺序设定 从0开始
29.List判断俩个对象相等是通过equals()方法的 String的equals()方法已经被重写过了
30.java8 提供了sort()和replace()俩个方法 sort()需要一个Comparator对象来控制元素排序
31.ArrayList 和 Vector 都是List的实现类 ArrayList常用 Vector比较古老,不推荐使用
32.ArrayList其实就是封装了一个动态的,允许在分配的Obect[]数组

33.ArrayList线程不安全 Vector相反 但是还是不推荐使用

(五)

34.Queue 队列接口 下有priorityQueue类 该接口为表中队列实现类 但是它是根据元素大小排序的并不是标准的先进先出
   排序方法和TreeSet差不多 也可以 自然排序 定制排序
35.Deque是Queue的子接口 ArrayDeque使它的实现类 双端队列 也实现了栈的方法
36.LinkList是List接口的实现类 可以根据索引访问元素 可以被当成双端队列 栈 方法也与上面介绍的ArrayDeque相同
   但是它的实现机制区别于上面类 内部用链表实现
37.从Java的源码来看,Java是先实现了Map然后将Map中的value值都置为null实现了Set
38.Map允许添加重复的key后来的会覆盖已经存在的
39.所有的Map实现类都重写了toString()方法

40.HashMap Hashtable都是Map的实现类,Hashtable比较古老 是线程安全的

(六)

41.Java提供了一个操作Set List Map等集合的工具类 Collections
42.Conllections可以将前面讲的一些类变为线程安全的类

 

以上是我个人看书的时候做的一些笔记












你可能感兴趣的:(java)