JAVA数据结构---list和set

首先
Collection是所有集合的超类。
set接口和list接口继承了Collection接口。

List

list接口表示有序(存入顺序和取出顺序一致)可以存储重复值的集合,并且可以保存null元素。
它的实现类有ArrayList和LinkedList、Vector等。

  • ArrayList:底层是数组,查询元素和修改某一个元素快。
  • LinkedList: - 底层是双向链表,删除和增加快。
  • Vector:和ArrayList的原理一样,但是它线程安全(效率更低)。

set

set接口表示无序(存入顺序和取出顺序不一致),不可以存放重复的值的集合,可以保存null元素。
它的实现类有HashSet和TreeSet、Queue等。

HashSet
底层基于HashMap。HashMap基于HashCode,是一个非线程安全。
HashMap底层是键值对的数组+链表+红黑树(JDK1.8之后)。
判断重复的机制:先判断元素的hashcode,hashcode值相等再判断equals,都相等则是同一个元素。

使用HashSet存储自定义类对象时,可以在自定义类中重写equals和hashCode方法避免“真实”对象被多次存入,主要原因是集合内不允许有重复的数据元素,在集合校验元素的有效性时(数据元素不可重复),需要调用equals和hashCode验证。

LinkedHashSe
LinkedHashSet是HashSet的子类:是一个有序的HashSet,在HashSet的基础上维护了链表。
使用LinkedHashSe的场景:元素不重复,并且存入和取出顺序要求。

TreeSet
基于TreeMap,TreeMap底层基于红黑树(特殊的二叉树,左边叉值小,右边叉值大,有自平衡机制)。

  1. 自然排序:元素类型必须实现了Comparable接口,且必须重写compareTo()方法。
    返回值 正数:升序
    返回值 负数:降序
    返回值0:相同的元素,就不会添加了
  2. 定制排序:
    在创建TreeSet对象的时候,传入一个Comparator接口的实现类,该实现类必须重写compare方法
    返回值 正数:升序
    返回值 负数:降序
    返回值 0:相同的元素
    当自然排序和定制排序同时使用,定制排序优先级更高
    一般情况下,默认排序用自然排序,特殊排序用定制排序

遍历集合的方式

1.list集合有四种遍历方式
foreach遍历: 因为ArrayList间接实现了Iterable接口

	方式1//foreach遍历集合
	for (Object object : list) {
		System.out.println(object);
	}
	
	方式2//for遍历集合
	for (int i = 0; i <list.size() ; i++) {
		System.out.println(list.get(i));
	}
	
	方式3//单向迭代器
	Iterator iterator = list.iterator();//创建单向迭代器对象
	while (iterator.hasNext()) {
		System.out.println(iterator.next());
	}
	
	方式4//双向迭代器
	ListIterator listIterator = list.listIterator();
	//创建双向迭	   代器对象:正向迭代
	while (listIterator.hasNext()) {
		System.out.println(listIterator.next());
	}
	while (listIterator.hasPrevious()) {//反向迭代
		System.out.println(listIterator.previous());
	}
	

2.set集合有两种遍历方式
没有下标不能普通for循环遍历
foreach遍历: 因为hashSet间接实现了Iterable接口

	//方式1:迭代器
	Iterator iterator = hashSet.iterator();
	while (iterator.hasNext()) {
		System.out.println(iterator.next()+"didi ");
	}
	//方式2:foreach
	for (Object object : hashSet) {
		System.out.println("!!!!" +object);
	}

猜你喜欢

转载自blog.csdn.net/weixin_43678301/article/details/108027479