Collection集合相关

1 集合的结构

在这里插入图片描述

HashSet实现自定义类型内容不重复的原理:根据hash值先计算要存储的位置,如果该位置没有元素则直接存储,如果该位置有元素,则遍历该位置的所有元素,先比较hash值,再比较equals,两者其一不相同才认定不是同一个,存储的该位置的链表中。存储自定义类型时,要保证唯一元素,需要重写hashCode和equals方法(根据实际情况决定)。

TreeSet:使用无参构造存储自定义对象要实现Comparable接口,重写CompareTo方法;使用带参构造,需要自定义Conparator排序规则;注意自己分析主要排序条件和次要排序条件。

1.1 多线程使用集合

a List的选择:ArrayList不是线程安全的集合。
b Vector太过于笨重性能低下.
c new CopyOnWriteArrayList()也会频繁创建数组.
d List objects = Collections.synchronizedList(new ArrayList<>()) 相对来说性能更好。

2 collection集合中常用共性方法

  • public boolean add():添加元素
  • public boolean remove():删除元素
  • public boolean contains():判断是否包含
  • public boolean isEmpty():判断集合中是否有元素
  • public int size():判断集合中元素的个数
  • public boolean clear(): 清空集合元素
  • public boolean toArray():将集合转换成数组(转换的数组元素个数固定,原集合不改变)
  • 注意:遍历集合不能对集合进行修改,会引起并发修改异常,java.util.ConcurrentModificationException,想要删除必须使用迭代器。

3 迭代器iterator

  • boolean hasNext():返回是否有仍有元素
  • E next()L返回下一个迭代的元素
  • void remove():移除集合中的元素
    在这里插入图片描述

4 泛型

在这里插入图片描述
不使用泛型

  • 好处:数据类型可以多种多样。
  • 弊端:数据不安全,获取的时候需要自己转型。

使用泛型

  • 好处:把运行期异常变成了编译期异常,存的是什么类型就取什么类型,避免了类型转换的麻烦。
  • 弊端:只能存储一种数据类型。
  1. 定义含有泛型的类:创建对象的时候确定泛型的具体类型
    修饰符 class 类名<代表泛型的变量> { }
class ArrayList<E>{
	public boolean add(Ee){}
	public E get(int index){}
	....
}
  1. 定义含有泛型的方法:调用的时候确定泛型的具体类型
    修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
public class MyGenericMethod {
	public<MVP> void show(MVP mvp) {
		System.out.println(mvp.getClass());    
	}
	public <MVP> MVPshow2(MVP mvp) {
		return mvp;    
	}
}
  1. 定义含有泛型的接口:定义实现类的时候确定类型或者创建类对象的时候确定
    修饰符 interface 接口名<代表泛型的变量> { }
public interface MyGenericInterface<E>{
	public abstract void add(E e);
	public abstract E getE();  
}
  1. 泛型通配符
    4.1 当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,元素自身方法无法使用
    4.2 通配符高级使用----受限泛型
    之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限和下限。
  • 泛型的上限:
    格式:类型名称 <? extends 类 > 对象名称
    意义:只能接收该类型及其子类泛型的
  • 下限:
    格式:类型名称 <? super 类 > 对象名称
    意义:只能接收该类型及其父类型

5 数据结构

5.1 红黑树
满足规则
在这里插入图片描述

6 可变参数

  1. 当参数类型确定,参数个数不确定时可以使用可变参数,public void add(int…变量名称)。
  2. 如果参数有多个,可变参数要放在最后写。

7 Collections工具类

  1. addAll:添加多个元素。
  2. shuffle:打乱顺序。
  3. sort:排序,自定义类型需要实现Comparable或者Comparator接口,重写compareTo或者compare方法,自定义比较规则(返回0相等,大于0升序,小于0降序),或者使用匿名内部类来创建排序规则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值