Java集合类总结(详细)


Java集合类

Java集合类包括两个根接口:Collection和Map。

一、Collection

包括Set、Queue、List。

1. List(接口)

​ List 接口继承了 Collection 接口,定义一个允许重复项的有序集合;按照对象进入顺序进行保存对象,List集合就像是一个数组,有序,长度可变

特点: 有序集合、有重复

操作 :add()、get()、set()、size()、remove()等

常用的实体类: ArrayList等

包括的实体类: ArrayList、Vector、Stack等

具体描述见下图:
在这里插入图片描述

2.Set(接口)

Set 接口继承了 Collection 接口,集合元素无序且无重复。

无重复原理:每个Set实现类依赖添加的对象的 equals() 方法来检查独一性,即任意两个元素e1和e2,都有e1.equals(e2)=false

特点: 无序集合、不可重复

操作 :add()、get()、set()、size()、remove()等

常用的实体类: HashSet、TreeSet等

包括的实体类: HashSet、TreeSet、EnumSet、LinkedHashSet等:

具体描述见下图:
在这里插入图片描述

3.Queue(接口)

特点: 队列(先进先出、有序表)

主要实现类有: PriorityQueue、ArrayDeque等

Collection主要实现类特点

在这里插入图片描述

二、Map:

Map接口含有两个部分(两列):关键字和值 (key-value,简称键值对);key不可重复,value可重复;添加数据时,如果key重复,则用新值替换原有的值。

操作: put(key,value)、remove()、clear()、size()、containsKey(Object key)、containsValue(Object value)

常用实现类: HashMap、TreeMap

具体描述见下图:
在这里插入图片描述

三、Collections工具类

Collections是针对集合的工具类,提供了排序、反转、求最值、二分查找等功能, 大大提高了开发人员工作效率。

Collections常用方法说明
sort(List< T> list)根据自然顺序(升序)对指定list集合排序
sort(List< T> list,Comparator< ? super T> c)list-集合;c比较器:按指定比较器c为list排序
max(Collection< ? extends T> collection)根据自然顺序(升序)排序,返回collection的最大元素
min(Collection< ? extends T> collection)根据自然顺序(升序)排序,返回collection的最小元素
binarySearch(List<>list,T key)list-集合,key-指定对象:对List二分查找key(必须先自然升序排序)
reverse(List list)反转List元素的顺序

四、Arrays工具类

Arrays是针对数组的工具类,提供了排序,查找,二分查找等功能。

Arrays常用方法说明
sort(array)对指定的基本数据类型数组array按升序排列
equals(array1,array2)如果两个指定的基本数据类型数组相等返回true
binarySearch(array,val)对基本数据类型数组array进行二分查找val
toString(array)把基本数据类型数组array内容转换为字符串

五、集合排序问题

1.默认自然排序

Collections.sort(List list)可以实现元素的自然排序。

自然排序定义: { (x, y) | x.compareTo(y) <= 0 } 从小到大排序

2.自定义排序

​ 自定义排序有两种方法:

  • 使用Comparator接口
  • 使用Comparable接口
(1)使用Comparator接口
  1. 先自定义一个比较器类实现 java.util.Comparator 接口
  2. 然后调用Collections.sort(List list, Comparator c) 完成自定义排序
class myComparator implements Comparator{
	@Override
	public int compare(Object o1, Object o2) { // 实现compare()方法
		int x = (int) o1;
		int y = (int) o2;
		if( x > y )
			return -1;
		else
			return 1;
	} 
}

public class Test {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		list.add(100);
		list.add(50);
		list.add(120);
		Collections.sort( list, new myComparator() );
		System.out.println( list ); // [120,100,50]
	} 
}
(2)使用Comparable接口
  1. 在定义对象类时实现比较接口 java.lang.Comparable,实现接口的 int compareTo(Object o) 比较方法 (1个参数)
  2. 然后调用 Collections.sort( List list ) 完成自定义排序
class Point implements Comparable {
	int x; int y;
	public Point() { }
	public Point(int x, int y) { this.x = x; this.y = y; }
	@Override
	public String toString() {
		return "[x = " + x + ", y = " + y + "]";
}
@Override
public int compareTo(Object o) { //实现compareTo()方法
	Point p = (Point) o;
	if ( this.x != p.x )
		return this.x - p.x;
	else
		return this.y - p.y; 
	} 
}
(3)Comparator与Comparable接口比较
  • Comparator是在集合外部实现的排序,Comparable是在集合内部实现的排序;一个类实现了Camparable接口则表明该类对象之间是可相互比较的,该类对象组成的集合就可以直接使用Collections.sort()排序
  • Comparator一种比较器,能将算法和数据分离,通过Comparator来实现排序而不必改变对象本身
  • 可定义多种Comparator为同一个集合对象使用
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值