java集合基础

java集合基础,第1张

java集合基础 单例集合结构

Iterator接口

描述:用来遍历单例集合的。
常用方法:
E next():返回迭代的下一个元素
boolean hasNext():如果仍然有元素,返回true。
简单使用:

public class a {
    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        list.add("123");
        list.add("456");
        list.add("789");
        //每个集合都有自己的迭代器
        Iterator iterator = list.iterator();
        //判断是否有迭代元素
        while (iterator.hasNext()){
            //取出迭代出的元素
            String s = iterator.next();
            System.out.println(s);
        }
    }
}

在while循环中 *** 作集合元素,会出现并发修改异常。

List集合

特点:有序,元素可重复。
ArryList底层是一个Objects[],数组,在new的时候创建了一个长度为0的空Objects[],在第一次调用add的方法的时候,创建了一个一个长度为10的Objects[]数组。在扩容时是原有集合1.5倍。
int newCapacity = oldCapacity + (oldCapacity >> 1)

linkedList集合

底层的数据结构是双向链表。
元素增删快,查找慢,线程不安全,运行速度快。
在get元素时采用了一个简单的二分法,进行查找。

Set集合

set集合没有重复元素(hashcode方法和equals方法)。

HashSet集合

无序(hashcode%数组长度)。
底层是由一个HashMap(哈希表)实现,值被存储为map的键,在添加元素时,会创建一个对象作为HashMap的值。
桶的数量>8,数组元素>=64,时会变成红黑树。
在存储对象时,对象应该重写hashcode和equals方法(不重写调用object的equals,比较地址值),否则会存入相同内容的对象。

linkedHashSet

有序,不可重复。

单例集合遍历

1.iterator接口
2.增强for循环。

public class a {
    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        list.add("abc");
        list.add("def");
        list.add("ghi");
        for (String s : list) {
            System.out.println(s);
        }
    }
}
红黑树


约束:
1.节点可以时红色或者黑色的。
2.根节点时黑色的。
3.叶子节点(空节点)是黑色的
4.每个红色节点的子节点都是黑色的。
5.任何一个节点到其每一个叶子节点的所有路径上的黑色节点数相同。
特点:查找速度快,趋近于平衡树。

哈希表

哈希表是数组加链表或者红黑树。
保证元素唯一:
对象所属的hashcode方法和equals方法。hashcode不同一定不相等,hashcode相同用equals方法比较(默认是地址值)。

HashSet构造方法

空参构造方法创建HashSet集合对象,把加载因子指定为0.75,底层的数组table为null。第一次添加元素,数组长度变为16。

集合底层数据结构

ArrayList:object[]数组
linkedList:双向链表
HashSet:哈希表(HashMap)
linkedHashSet:linkedHashMap
HashMap:数组+链表+红黑树
linkedHashMap:HashMap+linkedList

集合线程安全

线程安全:
vector(单例),HashTable(双列)
线程不安全:
单例:ArrayList,HashSet、TreeSet,linkedList。
双列:HashMap,TreeMap

Map集合的遍历
public class a {
    public static void main(String[] args) {
        Map map=new HashMap();
        map.put("张三1", "男");
        map.put("张三2", "男");
        map.put("张三3", "男");
        //加强for循环
        for (String s : map.keySet()) {
            System.out.println(map.get(s));
        }
        //遍历键或者值
        for (String s : map.keySet()) {
            System.out.println(s);
        }
        for (String value : map.values()) {
            System.out.println(value);
        }
        System.out.println("==============");
        //加强for遍历键和值
        for (Map.Entry entry : map.entrySet()) {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5522834.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-13
下一篇2022-12-13

发表评论

登录后才能评论

评论列表(0条)

    保存