深入理解Java集合体系

深入理解Java集合体系

  • 集合体系其实一共分为两大块儿:Collection和Map,他们都与Iterator相关联
1, Collection(单值)
Collection是一个接口,实现了Iterable接口,意味着所有实现Collection的类都将实现Iterator方法,他们都能生成自己的迭代器。并使用foreach遍历。
Collection中的主要抽象方法说明
boolean add(E e)添加
boolean remove(Object o)删除
boolean contains(Object o)是否包含
Object[] toArray()将集合中元素转化为数组
void clear()清空集合
int size()元素个数
Iterator < E> iterator迭代器
  • 抽象类AbstractCollection部分实现了Collection中的一些方法,所有继承AbstractCollection的类中都将同时具备这些方法,他们是抽象类AbstractListAbstractSet
  • 继承Collection接口的有三个分支接口,分别是List, Queue, Set,他们在继承原有的Collection中的方法的同时,按照自己的特性,增加了一些需要实现的新方法。
1.1 Vector,ArrayList与(AbstractSequentialList->)LinkedList
这三个具体类都实现了AbstractList抽象类,用法接近。
  • Vector使用率远远低于ArrayList,Vector处理同步问题时不如ArrayList。用法与ArrayList相似。
  • ArrayList可以理解为一个数组,但是比数组更方便,具有数组存储方法的所有优点,按下标随机访问元素,还能动态扩容,但是增删不方便。
  • LinedList稍微有点特殊,它并不直接继承AbstractList,先继承AbstractSequentialList,而前者再继承AbstractList,LinkedList实现了Deque接口,这说明LinkedList可以模拟双端队列,并且它的插入是有序的,不支持随机访问,但增删非常方便。
1.2 HashSet,LinkedHashSet与TreeSet
这三个具体类都实现了AbstractSet抽象类,用法接近
  • HashSet在实现原理上来说,其实就是利用了HashMap的键,而将HashMap对应的值设置为常量,HashSet中元素不重复且插入无序
  • LinkedHashSet继承了HashSet,拥有HashSet的所有方法,改动不多,但是额外实现了插入有序的方法,所以LinkedHashSet在插入时是有序的。
  • TreeSet又稍微有点不同,它除了直接实现AbstractSet,还实现了NavigableSet接口,而前者实现了SortedSet接口,而SortedSet接口才实现了Set接口,它支持排序操作,默认按照自然语言顺序排序,也可以在自定义类中实现自定义排序方法。
1.3 Queue的用法比较少,BlockingQueue,PriorityQueue,LinkedList均实现了Queue接口。
2, Map(双值映射)
Map是一个接口,对于实现它的具体类,可以将其理解为一个键值对,一个键映射一个值
Map中的主要抽象方法说明
V put(K key, V value)添加键值对,不重复返回null,重复返回被覆盖的值
V remove(Object key)删除键值对,找到键,即可删除整个对子
boolean containsKey(Object key)是否包含某个键
Set< K> keySet()生成此map的键集合,这样就可以用Iterator遍历了
void clear()清空map所有元素
Set<Map.Entry<K, V>> entrySet()生成类型为Entry<K, V>的集合Set,也可以用来遍历
  • AbstractMap部分实现了Map接口
2.1 HashMap,LinkedHashMap与TreeMap
  • HashMap继承了AbstractMap,最常用,插入无序,
  • LinkedHashMap继承HashMap,除了增加一些构造方法,实现了额外的序列函数,其他用法一样,但是它的插入是有序的。
  • TreeMap除了直接继承AbstractMap,还实现了NavigableMap接口,而NavigableMap接口又实现了SortedMap,SortedMap最终继承Map。TreeMap和HashMap用法依然相似,但是默认按照自然语言顺序排序,并可以自定义排序方法。
3, Iterator(迭代器)
迭代器用于Collection单值集合,可以使用迭代器遍历Collection集合。且支持foreach遍历。迭代器一旦生成,最开始什么也不指,但是它即将指向集合的第一个元素。
Iterator主要抽象方法说明
boolean hasNext()判断是否有下一个元素
E next()指向下一个元素
void remove()删除当前指针指向的元素
//一般用法
ArrayList<String> list = new ArrayList<>();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
	System.out.println(iterator.next());
}
4, Collections 与 Arrays
  • Collections是一个具体类,提供了操作集合的一系列方法。可以自行ctrl+鼠标左键查看具体用法。
  • Arrays也是一个具体类,提供了操作数组的一系列方法。
  • 相互转化:
String strs[] = {"1", "2"};
Arrays.asList(strs)   //将其一个返回List类型的列表
ArrayList<String> list = new ArrayList<>();
list.toArrays()    //将返回String类型的数组 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值