集合 框架
集合概述:
集合就是一个容器,这个容器可以装很多其他的数据。
为什么会有集合框架?
数组:长度固定!!! 数组在操作它内部元素的时候,功能很单一!
集合:集合的功能很多,很强大。
集合和数组 的区别
A:长度区别:
1.集合长度可变
2.数组长度固定
B:单一性区别:
1.数组只能存储同一类型的数据
2.集合可以同时存储不同类型的数据
集合的继承体系
集合是由许多个的
存储数据的时候需求不一样的: 有序的,无序的,允许重复有重复元素,不允许有重复元素等等
不同种类的集合数据结构不一样
数据结构:就是数据的存储方式
Collection接口
集合层次结构中的根界面 。 集合表示一组被称为其元素的对象。 一些集合允许重复元素,而其他集合不允许。 有些被命令和其他无序。 JDK不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如Set和List 。 该界面通常用于传递集合,并在需要最大的通用性的情况下对其进行操作。
Collection的成员方法:
boolen add (E e):添加一个元素
boolean remove(Object o):删除一个元素
void clear():清空
boolean contains(Object o):包含
boolean isEmpty():判断是否为空
int size():集合中有几个元素
1.List集合
List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。
List接口继承于Collection接口,它可以定义一个允许重复的有序集合。因为List中的元素是有序的,所以我们可以通过使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
List接口为Collection直接接口。List所代表的是有序的Collection,即它用某种特定的插入顺序来维护元素顺序。用户可以对列表中每个元素的插入位置进行精确地控制,同时可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。实现List接口的集合主要有:ArrayList、LinkedList
(1)ArrayList
ArrayList是一个动态数组
代码块:
package com.data;
import java.util.ArrayList;
import java.util.LinkedList;
public class LinkedListTest {
static class Node{
int element;
Node nextNode;
}
public static void main(String[] args){
Node head=new Node();
Node child1=new Node();
child1.element=1;
head.nextNode=child1;
System.out.println(head.nextNode.element);
LinkedList linkedList=new LinkedList();
linkedList.add(1);
linkedList.remove(0);
linkedList.add(3);
linkedList.set(0,2);
linkedList.get(0);
}
}
结果
"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" "-javaagent:F:\IntelliJ com.data.Main
3
1
Process finished with exit code 0
(2)LinkedList
同样实现List接口的LinkedList与ArrayList不同,ArrayList是一个动态数组,而LinkedList是一个双向链表
package com.data;
import java.util.ArrayList;
import java.util.LinkedList;
public class LinkedListTest {
static class Node{
int element;
Node nextNode;
}
public static void main(String[] args){
Node head=new Node();
Node child1=new Node();
child1.element=1;
head.nextNode=child1;
System.out.println(head.nextNode.element);
LinkedList linkedList=new LinkedList();
linkedList.add(1);
linkedList.remove(0);
linkedList.add(3);
linkedList.set(0,2);
linkedList.get(0);
}
}
ArrayList和LinkedList
(1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
(2)对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
(3)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
2.Queue:队列
代码块
package com.data;
import java.util.LinkedList;
import java.util.Queue;
public class QueueTest {
public static void main(String[] args){
Queue queue=new LinkedList();
queue.add(1);
queue.add(2);
//System.out.println(queue.element());
//System.out.println(queue.peek());
System.out.println(queue.remove());
System.out.println(queue.size());
}
}
结果在这里插入代码片
"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" "-javaagent:F:\IntelliJ com.data.QueueTest
1
1
Process finished with exit code 0
3.Set接口
Set是一种不包括重复元素的Collection
(1)HashSet
HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序(这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致),而且HashSet允许使用null 元素
**代码块**
package com.data;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class SetTest {
public static void main(String[] args){
Set set=new HashSet();
set.add(1);
//set.remove(0);
set.contains(1);
System.out.println(set.size());
System.out.println(set.contains(1));
}
}
结果
"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" "-javaagent:F:\IntelliJ
1
true
Process finished with exit code 0
4.Map接口
Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同
代码块
package com.data;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
public static void main(String[] args){
Map map=new HashMap();
map.put("5555","aa");
map.put("555","555");
//map.remove("5555");
map.put("555","ss");
map.get("555");
System.out.println(map.keySet());
System.out.println(map.get("555"));
System.out.println(map.size());
}
}
结果
[555, 5555]
ss
2
Process finished with exit code 0
来源:CSDN
作者:zz233666
链接:https://blog.csdn.net/zz233666/article/details/103881826