Java--08.集合

23 篇文章 0 订阅

Java–08

第五章 集合


前言

21世纪,走进了信息时代,各种各样的软件层出不穷,但是总离不开程序开发,离不开程序开发语言,Java语言作为人们所熟知的一门语言,对于其有必要进行系统的学习。


集合

1.定义

集合,指一组未知长度数据的统称。在java中,常用数组来存储相同数据类型的定长数据,
但是实际情况中,往往会有大量数据需要进行存储,其数据长度未知,使用数组存储,容易
产生索引越界等异常,故,java中提供长度可变的存储数据的类,集合类;

2.分类

集合根据存储结构不同,分为单列集合与双列集合

2.1 单列集合

单列集合均为Collection的子类,根据元素是否可以重复,分为元素可重复的:
ArrayList,LinkedList,Vector,Stack;以及元素不可重复的HashSet,
TreeSet:
2.1.1 ArrayList
ArrayList是常见的单列集合,也是使用最频繁的集合。其存储结构为顺序结构,读取数据
速度快,但是对数据进行增删操作时间消耗大;
		ArrayList list = new ArrayList();//实例化ArrayList对象
        list.add(1);//添加元素 object类型
        list.add(1, 3);//指定位置添加元素 object类型
        list.set(0, "2");//修改指定索引元素
        System.out.println(list.size());//获取ArrayList的长度
        System.out.println(list.get(1));//获取指定索引的元素
        list.remove("2");//移除指定元素
        list.remove(0);//移除指定下标的元素
        System.out.println(list.contains("2"));//是否包含该元素 返回boolean值
        Object[] array = list.toArray();//将ArrayList解析成数组
ArrayList为顺序结构,添加元素时按照顺序进行添加,获取元素时可以通过索引进行获取
,其底层实现使用Object[]进行实现,默认长度为10,当长度大于当前最大容量时,会进
行自动扩容操作,扩容大小为旧长度的3倍;
int newCapacity = oldCapacity + (oldCapacity >> 1);
2.1.2 LinkedList
LinkedList,其存储结构为链式结构,读取数据速度较ArrayList稍慢,但其
进行增删操作快;
		LinkedList list=new LinkedList();//实例化LinkedList对象
        list.add(1);//添加元素 object类型
        list.add(1, 3);//指定位置添加元素 object类型
        list.set(0, "2");//修改指定索引元素
        System.out.println(list.size());//获取LinkedList的长度
        System.out.println(list.get(1));//获取指定索引的元素
        list.remove("2");//移除指定元素
        list.remove(0);//移除指定下标的元素
        System.out.println(list.contains("2"));//是否包含该元素 返回boolean值
2.1.3 Vector
Vector,其存储结构也为顺序结构,与ArrayList类似,但是其为多线程安全
的,ArrayList为多线程不安全的;
		Vector v = new Vector<>();//实例化Vector对象
        v.add(1);//添加元素 object类型
        v.add(1, 3);//指定位置添加元素 object类型
        v.set(0, "2");//修改指定索引元素
        System.out.println(v.size());//获取Vector的长度
        System.out.println(v.get(1));//获取指定索引的元素
        v.remove("2");//移除指定元素
        v.remove(0);//移除指定下标的元素
        System.out.println(v.contains("2"));//是否包含该元素 返回boolean值
        System.out.println(v.capacity());//获取容量
2.1.4 Stack
Stack,其继承自Vector,其采用的数据结构为栈,即后进先出
		Stack stack=new Stack();//实例化Stack对象
        stack.push(1);//压栈
        stack.push(2);
        stack.push(3);
        //3 2 1
        int a= (int) stack.pop();//弹栈,返回并移除栈顶元素3
        int b= (int) stack.peek();//返回栈顶元素2
        while (!stack.empty()){//判断栈是否为空
            stack.pop();
        }
2.1.5 HashSet
HashSet,无序的Set集合
		HashSet set=new HashSet();//实例化HashSet对象
        set.add(1);//添加元素
        set.add(2);
        set.add(3);
        System.out.println(set.contains(2));//判断是否包含某元素
        set.remove(1);//移除某一元素

        //使用迭代器遍历HashSet
        Iterator iterator=set.iterator();//获取set的迭代器
        while (iterator.hasNext()){//判断是否有下一个元素
            System.out.println(iterator.next());//获取下一个元素
        }
        //其遍历还可以使用foreach进行
HashSet是元素无序,并不可重复的,其底层判断元素是否重复,使用的是equals与Hash
值的方式,即首先进行hash值比较,如果hash值相同,则调用其equals进行比较,二者都
相同,即为同一元素,覆盖原有键的值,其底层实现使用的是hash表的数据结构进行实
现;
2.1.5 TreeSet
TreeSet,有序的Set集合
		TreeSet set=new TreeSet();
        set.add(1);
        set.add(2);
        set.add(3);
        set.remove(2);
        //其遍历可采用与HashSet相同的方式
TreeSet是元素有序,并不可重复的,其底层数据结构为红黑树,其元素必须实现Compa
rable接口

2.2 双列集合

双列集合均为Map的子类,其元素为(键:值)对存储,其中键不可重复,值可以重复,
分为HashMap,TreeMap,HashTable:
2.2.1 HashMap
HashMap,无序的Map集合
		HashMap map=new HashMap();//实例化HashMap对象
        map.put("name","张三");//放入元素,键:值
        map.put("age",18);//
        System.out.println(map.get("name"));//获取键对应的值
        System.out.println(map.containsKey("name"));//判断是否包含某个键
        System.out.println(map.containsValue(18));//判断是否包含某个值
        map.remove("age");//根据键移除元素
        map.remove("name","张三");//根据键值移除元素
        Set set=map.keySet();//获取map的键的集合
HashMap是键无序的,其键判断是否相等与HashSet相等,并且HashSet可看做是只存储
键的一个map集合
2.2.2 TreeMap
TreeMap,键有序的Map集合
		TreeMap map = new TreeMap();//实例化TreeMap对象
        map.put(1, "1");//添加元素
        map.put(3, "3");
        map.put(2, "2");
        System.out.println(map.get(1));//获取键对应的值
        System.out.println(map.containsKey(1));//判断是否包含某个键
        System.out.println(map.containsValue("2"));//判断是否包含某个值
        map.remove(2);//根据键移除元素
        map.remove(1, "1");//根据键值移除元素
        Set set = map.keySet();//获取map的键的集合
TreeMap是键无序的,其键要求实现Conparable接口,添加元素时,会根据键的类实现
的Comparable接口进行排序

笔记如有错误,遗漏之处,欢迎指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值