新入职场才大半年,给自己总结下之前学过的java知识,如有错误欢迎指正,不胜感激~
Collection:是Iterable实现类
java集合类是Iterable实现类的原因:Iterable内部封装了Iterator接口,实现了Iterable就能使用Iterator了。Iterator内部的next()和hashNext()方法,是依赖于迭代器的当前迭代位置的,如果Collection实现了Iterator,那么也会引入迭代指针,当在不同方法中传递时,
,由于当前迭代位置不可预测,next()的值变得不可预测。除非给Iterator添加一个reset()方法重置迭代位置,但是即使这样,Collection也只能存在一个迭代位置。而Iterable每次调用都会返回一个从头开始的迭代器,多个迭代器互不不影响
List:有序的Collection,用户能够精准地控制插入的元素,类似于数组,是一个列表,可根据下标读写元素
ArrayList:基于动态数组,实现了Collection和List,查询和插入元素比较方便快捷。插入或删除元素,后面的元素的位置都会发生变动。ArrayList的空间浪费主要是列表末尾会留一定空间
LinkedList:插入和删除元素的开销都是一样。LinkedList的空间浪费主要是每一个元素都会有一定的空间浪费
当需要在后面添加或删除数据,并且随机地访问数据,使用ArrayList,当在前面或中间添加或删除数据,并且按顺序地访问数据时,使用LinkedList。
Set:无序,不可重复,是集。
HashSet:按照哈希算法快速存取对象
TreeSet:实现了SortedSet接口,能够进行排序
Map:基于键值对的形式,值可以重复,键是唯一。下面几个实现类的主要区别是线程,同步,速度这几个方面
HashMap :可以有null,是非同步的。put存,get取,put时,调用hashCode()方法确定bucket的位置并存储Entry对象。如果hashCode值相等,则调用equals方法判断是否有这个值,若有,则更新值
HashTable :不可以有null,是同步的,线程安全,多线程可以共享一个HashTable
LinkedHashMap :put进去的时候,键值对的位置不会发生变化