java基础复习(集合)

java集合又叫做容器,主要由:Collection、Map两个接口派生而来。Collection接口:主要用于存放单一元素,下面又有:List、Set、Queue三个子接口;Map接口主要用于存放键值对。

  • List(对付顺序的好帮手): 存储的元素是有序的、可重复的。
  • Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。
  • Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。
  • Map(用 key 来搜索的专家): 使用键值对(key-value)存储

Map

        格式:<K,V>,K键,V值;将键映射到值,不能包含重复的键,每个键只能映射一个值,当输入重复键时,会进行替换;

        创建:以多态的方式;

        具体实现:HashMap   Map<String,Object> map = new HashMap<String,Object>();

底层

HashMap:jdk1.8之前:数组+链表;jdk1.8之后:数组+红黑树(当链表长度大于8时,将链表转化为红黑树)

LinkedHashMap:继承HashMap

HashTable:数组+链表

TreeMap:红黑树

TreeMap

        可以比较元素大小的Map集合,会对传入的Key进行大小的排序;可以使用元素的自然排序,也可以使用集合中自定义的比较容器来进行排序;

特点:

        不允许重复键;

        可以插入null,键和值都可以;

        可对元素进行排序;

        无序集合,插入和遍历顺序不一致;

基本操作:

1、遍历元素
Set<Map.Entry<String,Integer>> entrySet = treeMap.entrySet();
2、获取所有key
Set<String> keySet = treeMap.keySet();
3、获取所有value
Collection<Integer> valueList = treeMap.values();
4、获取集合内第一个元素
String firstKey = treeMap.firstKey();
5、获取集合内最后一个元素
 String lastKey =treeMap.lastKey();

排序:

        自然元素排序:需要让被比较的元素实现Comparable接口,这是因为在调用put()方法时,会将传入的元素转化为Comparable类型对象;

TreeMap<Integer,String> treeMapFirst = new TreeMap<Integer, String>();
treeMapFirst.put(1,"huangqiuping");
treeMapFirst.put(6,"huangqiuping");
treeMapFirst.put(3,"huangqiuping");
System.out.println(treeMapFirst.toString());
结果:{1=huangqiuping, 3=huangqiuping, 6=huangqiuping}

        使用自定义比较器比较:需要在创建treeMap对象时,将自定义比较器对象传到treeMap构造方法中;需要实现Comparator接口,并实现比较方法compare(to1,to2);

public class SortedTestComparator implements Comparator<SortedTest> {
    //自定义比较器:实现compare(To1,To2)方法:
    public int compare(SortedTest sortedTest1, SortedTest sortedTest2) {
        int num = sortedTest1.getAge() - sortedTest2.getAge();
        if(num==0){//为0时候,两者相同:
            return 0;
        }else if(num>0){//大于0时,后面的参数小:
            return 1;
        }else{//小于0时,前面的参数小:
            return -1;
        }
    }
}

HashMap

        用于存储K-V键值对的集合,每一个元素的初始值都是Null,无序的;

        常用方法:put() 、get()

        HashMap默认的长度为16,拓展或初始化长度必须是2的幂(确定位置时,碰撞概率会比较低)

        put过程:

                1、对Key求Hash值,然后再计算下标
                2、如果没有碰撞,直接放入桶中(碰撞的意思是计算得到的Hash值相同,需要放到同一个bucket中)
                3、如果碰撞了,以链表的方式链接到后面
                4、如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于6,就把红黑树转回链表
                5、如果节点已经存在就替换旧值
                6、如果桶满了(容量16*加载因子0.75),就需要 resize(扩容2倍后重排)
                查找时调用hash方法,找到具体的key所对应的hash,然后再到entry中去找value

比较:

HaspMaptreeMap
无序有序
查询速度更快查询速度慢
适合插入、删除、查找适合排序
非线程安全非线程安全
输出结果无序输出结果已排序
数组+链表+红黑树红黑树

List

        List是一个接口,继承于Collection;元素可以重复,有序存储(按照插入顺序进行有效存储),可以添加null。

底层

ArrayList:数组

LinkedList:数组

Vector:双向链表

ArrayList

        底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素;ArrayList更适合检索和在末尾插入或删除。初始容量为10。

常用方法:

方法作用
add(E)添加元素
set(int index,E element)覆盖指定位置的元素
remove(int index)删除指定位置的元素
get(int index)获取指定位置的元素
indexOf(Object o)获取指定位置的索引
iterator()获取迭代器
size()获取集合大小
isEmpty()判断集合是否为空
clear()清空集合
stream()为集合创建流

LinkedList

        底层数据结构是双向链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素;inkedList更适合从中间插入或者删除

常用方法:

方法作用
getFirst返回此列表中的第一个元素。
getLast返回此列表中的最后一个元素。
removeFirst从此列表中删除并返回第一个元素。
removeLast从此列表中删除并返回最后一个元素。
add将指定的元素追加到此列表的末尾。
addFirst在该列表开头插入指定的元素。
size返回此列表中的元素数。
clear从列表中删除所有元素。 此呼叫返回后,列表将为空。
contains如果此列表包含指定的元素,则返回true`
listIterator从列表中的指定位置开始,返回此列表中元素的列表迭代器(按适当的顺序)。
straem为集合创建流

Vector

        底层数据结构是数组,查询快、增删慢,线程安全(大部分的方法都包含关键字synchronized),效率低,可以存储重复元素;如果涉及到多线程,选择Vector

1、添加        addFirst()    addLast()
2、删除        removerFirst()    removerLast()
3、获取        getFirst()    getLast()

比较

ArrayListLinkedListVector
线程不安全,效率高线程不安全,效率高线程安全,效率低
数组链表数组
查询快,增删慢查询慢,增删快查询快,增删慢

Set

        treeMap主要功能用于排序;LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出);HashSet只是通用的存储数据的集合;

底层

HashSet:基于HashMap

LinkedHashSet:底层基于HashMap

TreeSet:红黑树

HashSet

        底层采用二叉树,元素无序且唯一,线程不安全,效率高,可以存储null元素;

常用方法:

方法作用
add添加元素
containsKey(Object)查询集合中是否包含指定键
remove(Object)删除指定键
iteartor迭代器
size()获取集合大小
isEmpty()判断集合是否为空
clear()清空集合

LinkedHashSet

        底层采用链表和Hash表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高;

常用方法:

方法作用
add添加元素
containsKey(Object)查询集合中是否包含指定键
remove(Object)删除指定键
iteartor迭代器
size()获取集合大小
isEmpty()判断集合是否为空
clear()清空集合

TreeSet

        底层采用二叉树实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性;

常用方法:

方法作用
add添加元素
containsKey(Object)查询集合中是否包含指定键
remove(Object)删除指定键
iteartor迭代器
size()获取集合大小
isEmpty()判断集合是否为空
clear()清空集合
descendingIterator倒叙遍历

比较

HashSetLinkedHashSetTreeSet
实现Set接口实现Set接口实现Set接口
线程不安全线程不安全线程不安全
添加、查询快添加、修改、删除快;有序只有需要对元素进行排序时使用
数组+链表+红黑树哈希表+双向链表红黑树
可以有null值可以有null值可以有null值

List与Set的区别

        1、List中元素可以重复,并且是有序的(按照插入的顺序进行存储);Set中的元素是不可重复的(重复元素会被覆盖掉),并且无序。

        2、List和Set都继承Collection接口;

        3、Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值