小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

在这里插入图片描述

一、集合的特点
二、继承结构图
三、List集合
1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历
四、Set集合
1.特点     2.HashSet类
五、Map集合
1.特点     2.HashMap类
六、Collections集合工具类
七、泛型
1简介     2.泛型类     3.泛型接口     4.泛型方法     5.泛型通配符
八、TreeMap和TreeSet
1.Set和Map的关系     2.继承关系     3.特点     4.构造方法

一、集合的特点

集合特点
数组特点类型固定,长度固定
类的特点不同类型的成员属性,共同描述一个实体类
集合的特点类型不固定,长度也不固定,随意存放任何数据

二、继承结构图

在这里插入图片描述

三、List集合

1.特点

List 接口存储一组可重复,有序的对象。

2.ArrayList类(数组集合)
常用方法:
方法功能
.add()/.add( , )添加元素(可通过下标参数指定添加位置)
.get()通过索引查找元素
.indexOf()通过元素查找索引
.set( , )替换指定索引位置的元素
.remove()删除并返回索引位置的元素
.isEmpty()判断集合是否为空
.contains()判断集合是否包含某元素
.addAll()集合加集合
.removeAll()集合减集合(会减掉前者里所有在后者里有的元素)

如果要删除为1的元素,直接传入参数1时,会被当成要删除元素的下标,
写为.remove(new Integer(1)) 或者 .remove(list.lastIndexOf(1)) 可以避免这种情况。

3.LinkedList类(链表集合)
存储原理:

是一个链表,在元素的前后分别有一个前置结点和后置结点,用于连接集合中的上一个元素和下一个元素,依次“手拉手”,构成一条链式数据的集合。

特有方法:
方法功能
.addFirst()将元素插入集合头部
.addLast()将元素插入集合尾部
.getFirst()获得集合的第一个元素
.getLast()获得集合的最后一个元素
.removeFirst()移除并返回集合第一个元素
.removeLast()移除并返回集合的最后一个元素
4.两者的对比
  • ArrayList实现了长度可变的Object类型数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
  • LinkedList采用链表存储方式,插入、删除元素时效率比较高

效率不同的原因:
Linkedlist在执行删除和添加操作时,只会对相邻的两个元素有影响。
Arraylist由于它的本质是一个数组,在执行删除和添加操作时,后面所有的元素的地址值都将出现移位。

5.集合的遍历

(1)for循环

for (int i = 0; i < list.size(); i++) {
	System.out.println(list.get(i));
}

(2)增强for

for (Object s:list) {
	System.out.println(s);
}

增强for循环相当于迭代器的简写。

(3)迭代器

  1. 创建迭代器对象
  2. 使用while进行循环
Iterator it = list.iterator(); // 创建迭代器对象
while(it.hasNext()){ // 进行循环
	System.out.println(it,next());
}

四、Set集合

Set集合其实是使用Map集合的键来实现。HashSet是Set接口常用的实现类。

1.特点

Set 接口存储一组唯一,无序的对象。

2.HashSet类
常用方法:
方法功能
.add()添加元素
.remove()删除元素
使用增强for或者迭代器实现获取所有元素

HashSet类 由于无序的特性, 故没有修改和获取单个元素的方法。

五、Map集合

1.特点

Map接口专门处理键值映射的数据,可以根据键实现对值的操作(无序且唯一)。

2.HashMap类
常用方法
方法功能
.put(key,value)添加数据
.remove(key)/.remove(key,value)删除数据(前者返回删除的值,后者返回是否删除成功)
.replace(key,value) / .replace(key,oldvalue,newvalue)替换数据
.get(key)查询单个数据
三种遍历方法*查询所有数据(遍历)
.containsKey(key)判断集合中是否存在某键
.containsValue(value)判断集合中是否存在某值
.isEmpty()判断集合是否为空
.clear()清除所有元素
.keySet()获取所有键的集合
.values()获取所有值的集合
*三种遍历方法

(1)遍历key

Set keys = map.keySet();
for(Object key:keys){
	System.out.println(key+map.get(key));
}

(2)遍历value

Collection values = map.values();
for(Object value:values){
	System.out.println(value);
}

(3)遍历键值对

Set entries = map.entrySet();
for(Object entry:entries){
	System.out.println((Map.Entry)entry).getKey()+((Map.Entry)entry).getValue());
}

六、Collections集合工具类

常用方法(静态)
方法功能
.shuffle()随机打乱
.sort()排序(类似数组的排序,也可以自定义排序方法)
.swap( , , )交换
.binarySearch( , )查找(集合必须事先用内部比较器按某种规律升序排列)

1.Collections类的排序只能使用内部比较器。
2.查找方法的第二个参数类型与集合中元素类型保持一致。

七、泛型

1.简介

Java泛型是jdk 1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)。

泛型这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

2.泛型类

类的后面定义一个或多个任意类型 ,可以在类的成员属性或方法中使用。
如:

public class Hello<T,A,B,C>{
	private T t;
	private A a;
	public void fun1(B b){
		System.out.println(b);
	}
}
//测试类中,调用构造方法,传入不同的类型作为参数,创建对象。
3.泛型接口

接口的后面定义一个或多个任意类型,可在接口的成员属性或方法中使用。
如:

public interface Haha <T> {
    void ff(T t);
}
4.泛型方法

在方法结构上声明一个或多个泛型,可用于方法的返回值或形参。
如:

public <T> T fun1(T t){
	System.out.println(t);
	return t;
}
5.泛型通配符
  • <? extends 类型> 表示某个类型或它的任意子类型
  • <? super 类型> 表示某个类型或它的任意父类型

如:

public static void cal(ArrayList<? extends Animal> s) {
	...
}

泛型通配符一般放在形参的类型后面。

八、TreeMap和TreeSet

1.Set和Map的关系

set使用了map的key。

2.继承关系

Set接口有一个实现类是HashSet,还有一个子接口是SortedSet,该接口有一个实现类是TreeSet。

3.特点

都是一个有序集合,TreeSet会根据自然排序排列或比较器进行排序,TreeMap中的元素默认按照keys的自然排序排列或比较器进行排序,都没有重复元素,也没有下标。

4.构造方法
有参构造
new TreeSet<>();
new TreeMap<>();
无参构造
new TreeSet<>(外部比较器Comparator);
new TreeMap<>(外部比较器Comparator);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值