Java常用集合

继承图

在这里插入图片描述

一、List接口的两个实现类ArrayList、LinkedList。

集合ArrayList:

特点:
1、有序的集合;
2、允许重复的元素;
3、有索引,可以使用普通的for循环遍历,因为该集合的底层是一个数组结构。

常用方法:

1boolean add(E e);//添加一个元素
2、E get(int index);//获取索引编号对应的元素
3、E remove(int index);//根据索引删除
4int size();//获取长度

另外,ArrayList与Array的最大区别在于是否可变长。

集合LinkedList:

特点:
1、有序的集合;
2、允许重复的元素;
3、底层是一个链表结构:查询慢,增删快;
4、包含了大量操作首层元素的方法。
注意:使用LinkedList集合特有的方法,不能使用多态。

常用方法:

1void addFirst(E e);//指定元素插入到集合头部
2void addLast(E e);//添加到集合结尾,相当于add()
3void push(E e);//与addLast(E e)一样
4、E getFirst();//返回第一个元素
5、E getLast();//返回最后一个元素
6、E removeFirst();//移除并返回第一个元素;
7、E pop();//与 E removeFirst()一样
8、E removeLast();//移除并返回最后一个元素
9boolean isEmpty();//判断集合是否为空

二、Set接口的两个实现类HashSet、LinkedHashSet。

集合HashSet:

特点:
1、不允许重复元素;
2、没有索引,不能使用普通for循环;
3、是一个无序的集合,存与取的顺序可能不一致;
4、底层是一个哈希表结构(数组+链表/红黑树)。
注意:HashSet存储自定义类元素时,自定义的元素需要重写hashCode()和equals()方法。

存储原理:底层是一个哈希表(数组+链表/红黑树)
1、数组结构:把相同哈希值的元素分为一组;
2、链表/红黑树结构:把相同哈希值的元素通过链表连接到一起。当链表的长度超过8位,就会把链表转换为红黑树。
3、Set集合在使用 add() 方法时,add() 方法会调用元素的 hashCode() 和 equals() 方法,判断元素是否重复。

集合LinkedHashSet继承了HashSet

特点:
1、不允许重复元素;
2、没有索引,不能使用普通for循环;
3、有序集合,底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表用于记录元素的存储区顺序,保证元素有序。

三、Map接口的两个实现类HashMap、LinkedHashMap。

Map接口的特点:双列集合(K,V),Key和Value的类型可以不同,Key不能重复,但Value可以重复,Key和Value一一对应。

常用方法:

1、V put(K,V);//添加一个元素,若Key存在,则Value替换,返回被替换的元素
2、V get(K);//获取指定Key的Value,若Key不存在,则Value返回null
3、V remove(K);//删除指定Key的元素,若Key不存在,则Value返回null
4boolean containKey(K);//判断集合是否存在Key。

Map集合的两种了遍历方式:
1、通过键找值

步骤:
(1)Map集合的 Set<K> keySet()方法返回 Key 的 Set 集合;
(2)遍历 Set 集合获取 Key;
(3)Map集合的 get(K) 找到 Value。

2、使用 Map 集合中的 Entry 对象
步骤:
(1)使用 Map 中的 entrySet() 方法把多个 Entry 取出来,存到一个 Set 集合中;
(2)遍历 Set 集合,获取每一个 Entry 对象;
(3)使用 Entry 的 getKey() 和 getValue() 获取键与值。

集合HashMap

特点:
1、底层是一个哈希表;
2、无序的集合。

集合LinkedHashMap继承了HashMap

特点:
1、底层是哈希表+链表;
2、有序的集合。


集合工具类Collections

Collections的一些静态方法:

1<T> boolean addAll(Collection<T> C, T...elements);//往集合C中添加多个元素
2void shuffle(List<?> list);//打乱集合顺序
3<T> void sort(List<T> list);//默认升序排序
4<T> void sort(List<T> list, Comparator<? super T>);//指定规则排序

注意:
1、使用第3种方法排序,自定义规则前提:被排序集合的元素,必须实现接口Comparable,重写方法comparaTo定义规则,规则(自己(this)- 参数:升序,反之为降序)。

2、使用第4种方法排序,自定义规则:使用匿名内部类重写规则,

sort(list, new Comparator<T>(){
	public int compare(T o1, T o2){
		return o1-o2;//左-右,升序
		//return o2-o1;//右-左,降序
		}
	});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值