第四天:java基础复习集合

Map

Map

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

        创建:以多态的方式;

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

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

比较:

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

List

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

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()

比较

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

Set

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

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 倒叙遍历

比较

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

List与Set的区别

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

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

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

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...