本文已参与「新人创作礼」活动,一起开启掘金创作之路。
什么是集合
在我们之前学数组的时候,是否有过这样的疑问。在我们开发的时候,如果不能确定数组长度,或是每次的数组长度不同,我们该怎么办呢?实际上,在java中已经帮我们解决了这个问题,就是“特殊的数组”—集合。与数组相比,集合没有了长度限制(数组需要在声明时确定数组长度),但只能装引用数据类型。其分类主要为map和collection(list和set是其子接口)。
集合的分类
集合主要分为collection,set,list,map四种。其中set和list是collection的子接口,map为独立的一种。
集合的特点及声明方法
1.collection
collection集合中,元素为无序(无索引)的,且数据可重复。
collection<引用数据类型> collection = new Arraylist<>();因为collection为接口,所以其无法创建对象,只能借助子接口的实现类及逆行对象创建。
.size() 获取集合的长度
.add()增加元素
foreach 遍历数组
.remove()删除元素
.replace() 替换元素
.isEmpty()判断集合是否为空
.clear()将集合清空
2.list
list集合中,元素是有序的,数据可以重复,其实现类中Arraylist和Linkedlist较为常用,但其结构存储方式不同。
Arraylist:其底层为数组结构,插入数据时,其后(索引后)数据依次进行递推,所以插入效率较慢,但在查询时,会自动对索引和两端进行判断,选择较短的路径进行查询,所以查询速率较快。
Linkedlist:其底层为双端链式结构,插入数据时,会判断链两端的编号是否相同,若不相同,则可插入,所以其插入时效率较高,但因其插入时未按索引进行排序插入,所以在查询时效率较低。
List<引用数据类型> list = new Arraylist<>();
List<引用数据类型> list = new Arraylist<>();
.size() 获取集合的长度
.add()增加元素
foreach 遍历数组
.remove()删除元素
.replace() 替换元素
.isEmpty()判断集合是否为空
.clear()将集合清空
3.set
set集合中,元素是无序的,数据不可重复添加,其实现类中hashset和Threeset较为常用。
hashset:存入时和取出时都是无序的,但当输出时,会进行排序,
TreeSet:存入时无序,当存好后,进行从小到大进行存(通过哈希码,底层自动调用,所以效率较低),但依旧无序号
set判重原则是通过栈内的地址进行判处,所以当两个对象属性(成员变量)全部相同时,set会认为其是两个对象。对此,我们可以在对象类中重写hashcode和equals方法进行解决,其中hashcode进行对象判断(是否为同一对象),equals进行对象的属性判断。
.size() 获取集合的长度
.add()增加元素
foreach 遍历数组
.remove()删除元素
.isEmpty()判断集合是否为空
.clear()将集合清空
因为set中是无序排列的,所以无法进行元素替换,只能先删除,再添加
4.Map
map集合又称为键值对集合,其中将“键”和“值”进行绑定,通过键来进行值的获取,其中一个键只能对应一个值,单可以通过不同键相同值的方式将多个键对应一个值,其结构是由一个collection(值)和一个set(键)组合而成。其常用的实现类为hashmap,Treemap和HashTable,
HashMap:键无序,键值都可以为空。
TreeMap:键从小到大排序(hash码进行排序)
HashTable:键与值都不可以为空
- map.put(k,v)添加数据
- map.kuyset获取所有键;
- map.values获取所有值;
- map.replace修改值
- 改键:获取到后(set)先删再加
- map.remove 删除键值对
7.isEmpty()判断集合是否为空
8.ear()将集合清空
注意,map不可以通过foreach进行数组遍历