Java集合类总结

前言:

这篇准备好好总结一下Java的集合类,在顺便带上Arrays,把这几者之间的关系说清楚,在java.util包中提供了一些集合类,这些集合类又被称作容器,这时候可能我们就联想到了就是Arrays,他们之间不同的地方就是:数组的长度是固定的,集合的长度是可变的;数组是用来存贮基本类型的数据,集合用来存放对象的引用,最常用的大家也都是知道,List集合,Set集合,还有Map集合。这其中呢List集合和Set集合继承了Collection接口,他们的关系如下图,按自己的理解这样,要是有不正确的地方告诉我哈:

下面这样是更细致完整点的,谢谢同行:

 Collection接口:

它是层级结构中根接口,构成它的单位称为元素。一般情况下不会直接使用它,上面的结构图我们也可以看出,List和Set方法都是继承与它的,所以也就继承它的方法,常见的我们下面也做了总结:

下面是上面代码的打印日志:

List接口:

    List是继承与Collection的,所以Collection的方法List都可以用,不过有两个方法特别注意的:

    (1): get(int index) 获得指定位置处的元素

    (2): set(int index , Object obj) 将集合中指定位置处的对象修改为对象obj. 尤其这个方法,我刚开始在想Javay应该不可能不会有替代某位置元素的方法,找了许久,但没想到是这个set方法。

    List接口的常用两个实现类,一个是ArrayList,一个是LinkedList,一个一个说说:

    ArrayList: 可变的数组,允许保存所有的元素,当然就包括null。它的优点是:可以快速的随机访问index处的对象 缺点是:指定位置插入删除是速度慢

    LinkedList:采用链表结构保存对象,它的优缺点和上面我们说的ArrayList的也就相反了。

    看看ArrayList最基本的使用:

下面是打印的结果:

Set接口:

 Set结合中的对象不按照特定的方法排序,只是简单的把对象加入到集合中,但是很重要的一点就是Set集合中不能包含重复的对象,Set和List一样是继承自Collection的。

   Set接口常用的实现类有HashSet和TreeSet 

   HashSet类实现了Set接口,有哈希表(实际上是HashMap)支持,它不保证Set的迭代顺序,特别是它不包证高顺序的持久不变。 此类允许使用null。

   TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口。因此,TreeSet类实现的Set集合在遍历集合时可以按照自然顺序排序,也可以按照指定比较器递增排序,也就是可以通过比较器对TreeSet类实现的Set集合中的对象进行排序,下面定义了一个StudentClass类,重点是这类要想添加到TreeSet实现的集合当中的话就得实现Comparable接口,实现compareTo方法:

下面是它的调用和打印的东西,我们粘贴出来,在最后会是打印的日志:

随后是打印的日志,可以看到是没有问题的:

Map接口:

Map集合没有继承Collection接口,它提供的Key到Value的映射,Map中不能包含相同的Key,每一个Key只能映射一个Value,下面是Map的基本使用,其实举一反三,这时候也大概知道怎么写怎么用了;

    建议使用HashMap集合,因为HashMap类实现Map集合,原因也是它的优点,集合添加和删除映射关系的效率更高。HashMap是基于哈希表的Maori实现。HashMap通过哈希码对内部的映射关系进行快速的查找,而TreeMap类的映射关系存在一定顺序,如果希望Map集合对象也存在一定的顺序,就用TreeMap.

后面的Arrays的使用因为在总结算法的学习,在自己的《算法学习》分类中再总结它的具体使用,从Arrays的冒泡和选择排序开始。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小勇DW3

ArrayList在foreach删除倒数第二个元素不抛并发修改异常的问题

平时我们使用ArrayList比较多,但是我们是否知道ArrayList在进行foreach的时候不能直接通过list的add或者move方法进行删除呢,

1883
来自专栏java一日一条

如何用Map对象创建Set对象

Java中的Map和Set有不少相似之处。本文将分享一个把Map类转化成Set类的小技巧。

731
来自专栏编程心路

在ArrayList的循环中删除元素,会不会出现问题?

在 ArrayList 的循环中删除元素,会不会出现问题?我开始觉得应该会有什么问题吧,但是不知道问题会在哪里。在经历了一番测试和查阅之后,发现这个“小”问题并...

4492
来自专栏我是业余自学C/C++的

Remove Duplicates from Sorted Array II

1684
来自专栏闵开慧

HashMap与HashTable区别

1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复...

2686
来自专栏杨熹的专栏

【LEETCODE】模拟面试-39. Combination Sum

和subset区别:规定了子集的sum==target 注意,这里传递的起始位置是i,而不是position+1,but why??? helper(res, ...

2845
来自专栏小二的折腾日记

LeetCode-49-Group-Anagrams

输入一个字符串数组,输出的是:将相同字符的字符串放在一个数组的二维数组。相同字符的处理,基本就是要对字符串排序的。然后需要考虑的就是排序好的那一个字符串怎么存的...

741
来自专栏尾尾部落

[LeetCode]Degree of an Array 数组的度 [LeetCode]Degree of an Array 数组的度

链接:https://leetcode.com/problems/degree-of-an-array/description/ 难度:Easy 题目:69...

1122
来自专栏JAVA高级架构

Java HashMap 遍历方式性能探讨

关于HashMap的实现这里就不展开了,具体可以参考 JDK7与JDK8中HashMap的实现 JDK8之前,可以使用keySet或者entrySet来遍历Ha...

42512
来自专栏吾爱乐享

#集合笔记二#list集合特有功能及案例迭代

1795

扫码关注云+社区

领取腾讯云代金券