java集合框架

Wesley13
• 阅读 299

一、为什么要使用集合

单个数据,可以用变量保存;

多个数据,可以用数组保存;

但是对于存储多个数据且数量不确定的情况,使用集合;

二、集合和数组的区别

(1)数组:
1、只能保存同一种类型的数据;
2、数组一旦创建,容量不可改变;
3、数组可以保存引用类型的数据和基本类型的数据;

(2)集合:
1、可以保存不同类型的数据;
2、集合可根据需要自动扩容;
3、集合只能保存引用类型的数据;

那么有个问题,为什么集合能存放引用类型?

原因:

集合的存在就是为了方便对多个对象的操作才出现的,存放的是对象的引用,实际内容都在堆上面或者方法区里面,但是基本数据类型是在栈上分配空间的。
想把基本数据类型存入集合中,直接存就可以了,系统会自动将其装箱成封装类。

(3)泛型

Java集合有个缺点,把一个对象丢进集合后,集合会忘记这个对象的数据类型,再次取出时,系统自动把它变成了Object类型。
为了解决这种问题,泛型出现了。
Java引入了参数化类型的概念,允许程序在创建集合时指定集合元素的类型,Java的这种参数化类型被称为泛型。如:List表明这个List中只能保存字符串类型的对象。
需要注意的是,泛型只能是对象,所以如果想保存基本数据类型时,可以使用基本类型的包装类。如List

三、集合中的层次关系

(1)Collection接口是集合类的根接口,没有实现类,但是有两个继承的接口,即List和Set。

特点:Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。

(2)Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。

特点:Map不能包含重复的key,但是可以包含相同的value。

(3)Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:

1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。

四、对于List、Set、Map简单应用

(1)Set

特点:不可重复

主要有两个实现类:hashSet和treeSet

HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。
TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

Set用法:

1 Set set=new HashSet();
2 String s1=new String("hello");
3 String s2=s1;
4 String s3=new String("world");
5 set.add(s1);
6 set.add(s2);
7 set.add(s3);
8 System.out.println(set.size());//打印集合中对象的数目为 2

(2)List

特点:线性方式存储,可重复

主要有两个实现类:ArrayList和LinkedList

ArrayList() : 长度可变数组。可以对元素进行随机的访问,向ArrayList()中插入与与删除元素的速度慢。
LinkedList(): 链表。插入和删除速度快,访问速度慢。

List用法:

 1 List list = new ArrayList();
 2 list.add(1);
 3 list.add(2);
 4 list.add(3);
 5 list.add(4);
 6 //1: 用for循环和get()方法
 7 for(int i=0; i<list.size();i++){
 8     System.out.println(list.get(i));
 9 }
10 //2: 使用 迭代器(Iterator)
11 Iterator iterator = list.iterator();
12 while(iterator.hasNext()){
13     System.out.println(iterator.next());
14 }

(3)Map

特点:键值对,值可以重复

Map用法:

 1 public class t1 {
 2     public static void main(String[] args)
 3     {   
 4         HashMap hashmap = new HashMap();     
 5         hashmap.put("Item0","Value0");     
 6         hashmap.put("Item1","Value1");     
 7         hashmap.put("Item2","Value2");     
 8         hashmap.put("Item3","Value3");     
 9         Set set = hashmap.entrySet();     
10         Iterator iterator = set.iterator();     
11         while(iterator.hasNext())     
12       {     
13           Map.Entry mapentry = (Map.Entry)iterator.next();     
14           System.out.println(mapentry.getKey()+"/"+mapentry.getValue());     
15       }  
16         
17     }
18 }

五、关于 ArrayList 与 LinkedList 的比较分析

 ArrayList 底层采用数组实现,LinkedList 底层采用双向链表实现。

随机访问,arrayList速度快,插入和删除linkedList快

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java中Map,List与Set的区别
首先,数组和集合的区别:数组是大小固定的集合可以存储和操作数目不固定的一组数据,集合只能存放引用类型的的数据,不能存放基本数据类型特性List允许重复有序继承自ConnectionSet不允许重复无序继承自Connection
Wesley13 Wesley13
2年前
Java 集合类
为什么使用集合数组长度是固定,如果要改变数组的长度需要创建新的数组将旧数组里面的元素拷贝过去,使用起来不方便。java给开发者提供了一些集合类,能够存储任意长度的对象,长度可以随着元素的增加而增加,随着元素的减少而减少,使用起来方便一些。数组和集合的区别区别1:数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类
Wesley13 Wesley13
2年前
MongoDB 分片管理(一)检查集群状态
一、检查集群状态1.1使用sh.status()查看集群摘要信息1、使用sh.status()可以查看分片信息、数据库信息、集合信息sh.status()如果数据块较多时,使用sh.status(true)又是输出会很多,就不会截断,要使用如下查看2、tooman
Stella981 Stella981
2年前
Map、Set、List集合差别及联系详解
前言:数组Array和集合的区别:1、数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)2、JAVA集合可以存储和操作数目不固定的一组数据。3、若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。 注:使用相应的toArray()和Arrays.asList()方法
Wesley13 Wesley13
2年前
Java集合笔记
1.1集合概述在前面基础班我们已经学习过并使用过集合ArrayList<E,那么集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,它们有啥区别呢?数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储基本数据类
达里尔 达里尔
4个月前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数