Java基础:集合

学习集合之前我们存储多个对象(数据)时,只能采用数组来存储,但是数组的长度是固定并且元素类型必须一致。但实际开发

时,往往我们需要保存的对象(数据)的个数是不确定的,这时我们需要用到其他的容器(集合):collection

集合:就是可以存储多个对象数据的容器

Java中提供java.util.Collection作为集合接口,定义了许多关于集合的处理方法:比如集合中元素的增删查改。

Collection只是一个接口

Collection有两个常用子接口:List和Set(其中List最常用)

一:List集合:是一个有序可重复的容器。

  • 有序:List集合中的元素都有索引标记,可以通过索引访问元素。
  • 可重复:list集合中允许加入重复的元素。

List集合的实现类:

  •  ArrayList:

底层通过数组来存储数据,

读取数据的效率比LinkedList高,

删除和插入数据的效率比LinkedList低

  • LinkedList:

底层通过双向链表来存储数据,

读取和设置数据的效率比ArrayList低

删除和插入数据的效率比ArrayList高

  • Vector:

底层通过数组来保存数据,线程安全

  • list集合的常用API:

boolean add(E element);  添加元素(添加到尾部)

 void add(int index,E element);插入元素

set(int index,E element);修改元素

 get(int index);  获取元素

 remove(int index); 根据下标删除元素

int size(); 获取容器大小(元素个数)

二:Set集合:是一个无序且元素不可重复的容器。

  • 如何判断元素是否重复?

将元素存入set集合中时,首先会比较对象的hash值,如果没有相同的则表示没有重复,直接存入set集合中;如果存

在相同的hash值,则还需要根据equals来比较对象的内容是否相同,如果equals比较也相同则表示元素重复了,不予 存放;如果equals比较不相同则表示元素没有重复,可以存放。

  • set集合的实现类:
  • HashSet

 底层通过hashMap存储元素数据,性能比TreeSet好。

  • TreeSet

  底层通过TreeMap存储元素数据,并且会自动对元素进行升序排列。(通常不使用自动排序,需要排序时 采用Arrays.sort进行排序就行了)

  • set集合的常用API:

boolean add(E element); 添加元素

boolean remove(Object o);  删除元素

clear();清除元素(删除全部元素)

int size();容器大小(元素个数)

boolean contains(Object obj);是否包含元素obj

toArray()set转数组(顺序随机,但是如果set是排过序的则按照它的顺序)

三:Map容器:通过键值对的方式存储数据。

  • 特点:通过键值对存放数据

通过键来访问值

键:不可以重复

值:可以重复

  • 实现类:

HashMap:底层通过哈希表实现数据的存储,线程不完全。

HashTable:底层通过哈希表实现数据的存储,线程安全。

TreeMap:底层通过红黑树实现数据的存储,性能比HashMap差,但是可以自动对键做升序排列。通常不用它。

 Properties:继承自Hashtable。主要用于Properties文件进行交互(存储和读取数据)

  • 注意点:hashMap的键和值可以是null值,但是Hashtable不可以是null值。
  • map集合常用的api:

put(key,value); 添加或者修改数据(存在则修改)

get(key);通过键获取值

remove(key);通过键移除键值对(数据)

clear(); 清除数据(全部删除)

size(); 获取键值对(数据)的总个数

booelan containsKey(key) 是否包含该键key所对应的键值对,有则返回true

booelan containsValue(value)是否包含该值value所对应的键值对,有则返回true

四:Collections工具类

该类定义了对collection,list,set,map集合对象的一些通用操作方法

sort(List<?> list);                                  对list集合进行排序

 binarySearch(List list,E element);       二分法查找元素

  • 引用数据类型的排序:1、内比较器:Comparable;2、外比较器:Comparator
//使用外比较器
Collections.sort(list, new Comparator<Student>() {

	@Override
	public int compare(Student o1, Student o2) {
		//按照身高降序,返回正数表示对象大,返回负数表示对象小,返回0表示对象相同
		return -(o1.height-o2.height);
		}
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值