java 集合学习笔记

1.Collection(单列结合)

List(有序,数据可重复)

ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高。

Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低。

LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高。

Set(无序,数据唯一)

HashSet:底层数据结构是哈希表。哈希表依赖两个方法:hashCode()和equals(),这两个方法可以通过编译器自动生成即可。

执行顺序:先判断hashCode()值是否相同

是:继续执行equals(),看返回值是true:说明元素重复,不添加;是false:就直接添加到集合。

否:就直接添加到集合。

LinkerHashSet:底层数据结构由链表喝哈希彪组成,链表保证元素有序,哈希表保证元素唯一。

TreeSet:底层数据结构是红黑树(一种自平衡的二叉树)。

如何保证元素唯一性:根据比较的返回值是否是0来决定。

如何保证元素的排序:

自然排序(元素具备比较性):让元素所属的类实现Comparable接口。

比较器排序(集合具备比较性):让集合接收一个Comparator的实现类对象。

2.Map(双列集合)

Map集合的数据结构仅仅针对键有效,与值无关。存储的是键值对形式的元素,键唯一,值可重复。

HashMap:底层数据结构是哈希表,线程不安全,效率高。

哈希表依赖两个方法:hashCode()和equals(),这两个方法可以通过编译器自动生成即可。

执行顺序:先判断hashCode()值是否相同

是:继续执行equals(),看返回值是true:说明元素重复,不添加;是false:就直接添加到集合。

否:就直接添加到集合。

LinkedHashMap:底层数据结构由链表喝哈希彪组成,链表保证元素有序,哈希表保证元素唯一。

Hashtable:底层数据结构是哈希表,线程安全,效率低。

哈希表依赖两个方法:hashCode()和equals(),这两个方法可以通过编译器自动生成即可。

执行顺序:先判断hashCode()值是否相同

是:继续执行equals(),看返回值是true:说明元素重复,不添加;是false:就直接添加到集合。

否:就直接添加到集合。

TreeMap:底层数据结构是红黑树(一种自平衡的二叉树)。

如何保证元素唯一性:根据比较的返回值是否是0来决定。

如何保证元素的排序:

自然排序(元素具备比较性):让元素所属的类实现Comparable接口。

比较器排序(集合具备比较性):让集合接收一个Comparator的实现类对象。

3.集合的常用方法及遍历

Collection常用方法:

        Collection c = new ArrayList();
        c.add("hello");//往集合里添加一个元素
        c.add("world");
        c.clear();//清除集合里对所有元素
        c.remove("world");//移除集合里对指定元素
        c.contains("hello");//判断集合里是否包含指定元素
        c.isEmpty();//判断集合是否为空
        c.size();//获取集合里的元素个数

        Collection c2 = new ArrayList();
        c2.add("android");
        c.addAll(c2);//添加一个集合的元素
        c.removeAll(c2);//移除一个集合的元素,只要有一个被移除了就返回true
        c2.containsAll(c);//判断集合中是否包含指定的集合元素,只有包含所有元素才返回true
        c2.retainAll(c);//集合的交集,A和B两个集合,A.retainAll(B),最终结果保存在A集合里,B集合不变。返回Boolen值表示A集合是否发生改变

增强for遍历:

        List<String> c = new ArrayList<String>();
        c.add("hello");
        c.add("world");
        //增强for遍历之前最好检查下集合是否为null,为null会报错
        if (c != null) {
            for (String str : c) {
                System.out.println(str);
            }
        }

迭代器遍历:

        Collection c = new ArrayList();
        c.add("hello");
        c.add("world");
        Iterator it = c.iterator();
        while (it.hasNext()) {
            Object obj = it.next();//获取元素,并移到集合下一个元素的位置
            System.out.println(obj.toString());
        }

List集合普通for遍历:

        List<String> c = new ArrayList<String>();
        c.add("hello");
        c.add("world");
        for (int i = 0; i < c.size(); i++) {
            String str = c.get(i);
            System.out.println(str);
        }

Map常用方法:

        Map<Integer, String> m = new HashMap<Integer, String>();
        m.put(2, "hello");//添加元素,如果键是第一存储,就直接存储元素,返回null;如果键不是第一次存储,值替换以前的值,返回以前的值。
        m.put(3, "world");
        m.put(4, "android");
        m.clear();//移除集合里的所有键值对
        m.remove(2);//根据键删除键值对元素,并把值返回
        m.containsKey(3);//判断集合是否包含指定键
        m.isEmpty();//判断集合是否为空
        m.size();//获取集合键值对对个数
        String value = m.get(2);//根据键获取值
        Set<Integer> set = m.keySet();//获取集合中所有键的集合
        Collection<String> con = m.values();//获取集合中所有值的集合

根据键找值遍历:

        Map<Integer, String> m = new HashMap<Integer, String>();
        m.put(2, "hello");
        m.put(3, "world");
        m.put(4, "android");
        Set<Integer> key = m.keySet();//获取集合中所有键的集合
        for (int i : key) {
            String value = m.get(i);//获取键对应对值
            System.out.println("key:" + i + "---value:" + value);
        }

根据键值对对象分别找键和值:

        Map<Integer, String> m = new HashMap<Integer, String>();
        m.put(2, "hello");
        m.put(3, "world");
        m.put(4, "android");
        Set<Map.Entry<Integer, String>> set = m.entrySet();//获取所有键值对对象对结合
        //遍历键值对对象集合,得到每一个键值对
        for (Map.Entry<Integer, String> me : set) {
            int key = me.getKey();//获取键
            String value = me.getValue();//获取值
            System.out.println("key:" + key + "---value:" + value);
        }

 4.Collections(针对集合下操作的工具类)

        List<Integer> list = new ArrayList<Integer>();
        list.add(10);
        list.add(30);
        list.add(20);
        list.add(50);
        list.add(10);
        Collections.sort(list);//排序,默认按照自然排序,需要类型实现Comparable接口
        int index = Collections.binarySearch(list, 300);//二分查找,找不到返回值:-最大索引加1
        int maxValue=Collections.max(list);//查找最大值。
        Collections.synchronizedList(list);//将非线程安全的List包装为线程安全的。
时间: 2024-11-08 19:01:35

java 集合学习笔记的相关文章

Java集合学习笔记

有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是(用二叉树排序) Map AbstractMap 否 使用key-value来映射和存储数据,Key必须惟一,value可以重复 HashMap TreeMap 是(用二叉树排序) 一.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即 Collection的元素(Elements).一些

java JDK8 学习笔记——第16章 整合数据库

第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程序. 2.JDBC标准主要分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口.应用程序需要联机数据库,其相关API主要在java.sql和javax.sql两个包中. 3.应用程序使用JDBC联机数据库的通用语法: Connection conn = DriverManager.g

[原创]java WEB学习笔记95:Hibernate 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

java基础学习笔记day01

java基础学习笔记day01 1.软件开发: 软件:按照特定顺序组织的计算机数据和指令的集合 开发:软件的制作过程 软件开发:借助开发工具和计算机语言制作软件 2.java概述: java之父:詹姆斯·高斯林 JDK:java开发环境 jre:java运行环境 JVM:java虚拟机 java跨平台是因为,JVM能在不同的平台运行,JVM是跨平台的 JavaSE:标准版 JavaME:手机端,物联网 JavaEE:企业版,互联网项目 3.java语言特点: 简单性 解释性 面向对象 高性能 分

Android(java)学习笔记205:网易新闻客户端应用编写逻辑过程

1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容. 例如如下的网易RSS订阅: 2.由于我们这

黑马程序员--java基础学习笔记5

黑马程序员--java基础学习笔记6 一.笔记内容概述: 数组-第二种定义格式.数组-常见操作-遍历-最值-选择排序-冒泡排序-排序位置置换代码提取.数组-排序的性能问题.数组-常见功能-查找-折半查找.进制转换-查表法-整合. 二.常用内容介绍: 1.数组初始化的三种方式: int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3}; 2.查表法: 如果数据中出现了对应关系,而且对应关系的一方是有序的数字编

《深入Java虚拟机学习笔记》- 第5章 Java虚拟机

一.JVM的生命周期 当启动一个Java程序时,一个Java虚拟机实例就诞生了:当该程序关闭退出时,这个Java虚拟机也就随之消亡: JVM实例通过调用某个初始类的main方法来运行一个Java程序:这个main方法必须是public.static的,而且返回值必须是void:任何一个拥有这样的main方法的类都可以作为Java程序运行的起点: Java程序初始类中的main方法,将作为该程序初始线程的起点,其它任何线程都是由这个初始线程启动的: 守护线程和非守护线程 守护线程通常是由虚拟机自己

java—容器学习笔记

一:迭代器 刚开始学容器,做了个简单的练习题.. 1 import java.util.ArrayList; 2 import java.util.Collection; 3 import java.util.Iterator; 4 5 public class CollectionTest { 6 public static void main(String[] args) { 7 8 Collection<String>collstr = new ArrayList<String&g

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com