目录
集合:集合是java中提供的一种容器,可以用来存储多个数据,集合和数组都是容器.
Collection是所有单列集合的父接口,因此单列集合(Iist和Set)通用的一些方法,下面这些方法可以用于操作所有的单列集合,方法如下.
public booklean add(E e):把给定的对象添加到当前集合中.
public void clear();清空集合中所有的元素.
public boolean remove(E e):把给定的对象在当前集合中删除.
public boolean contains(E e): 判断当前集合中是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组中。
数组中的存储是同一类元素,可以存储基本数据类型值.集合存储的都是对象,且对象的类型可以不一致,再开发中一般当对象多一点,使用集合进行存储.
Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,他有两个重要的子接口.分别是List和Set
1.java.util.List:特点,元素有序,元素可以重复.
概述:此类包含用来操作数组的各种方法,比如排序和搜索等,其所有方法均为静态方法,调用起来非常简单.
操作数组的方法:public static String toString(int[ ] a),返回指定数组内容的字符串表示形式.
public static void sort(int[ ] a):对指定的int类型数组按数字升序进行排序.
详细解析:https://blog.csdn.net/shengmingqijiquan/article/details/52640584
1.对于随机访问get和Set,ArrayList觉得优于LinkedList,因此LinkedList要移动弄指针。
2.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
add(index,E)添加元素,在后面插入,后面的元素需要移动,复杂度(n)
remove()删除元素,后面的元素需要逐个移动,复杂度(n)
add(index E)添加第几个元素后,需要先查找第几个元素,指针指向操作,复杂度(n)
2.java.util.Set:特点,元素无序,而且不可以重复.
Collection集合
概述:
-
集合:集合是java中提供的一种容器,可以用来存储多个数据,集合和数组都是容器.
常用的功能:
Collection是所有单列集合的父接口,因此单列集合(Iist和Set)通用的一些方法,下面这些方法可以用于操作所有的单列集合,方法如下.
-
public booklean add(E e):把给定的对象添加到当前集合中.
-
public void clear();清空集合中所有的元素.
-
public boolean remove(E e):把给定的对象在当前集合中删除.
-
public boolean contains(E e)
: 判断当前集合中是否包含给定的对象。 -
public boolean isEmpty()
: 判断当前集合是否为空。 -
public int size()
: 返回集合中元素的个数。 -
public Object[] toArray()
: 把集合中的元素,存储到数组中。
代码演示:
package com.heima.Collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo01 {
public static void main(String[] args) {
//创建集合对象
Collection<String> strings = new ArrayList<>();/*多态形式*/
/*使用方法*/
/*添加功能*/
strings.add("张无忌");
strings.add("赵敏");
/*遍历输出*/
for (String string : strings) {
System.out.println(string);
}
/*判断元素是否存在*/
System.out.println("判断周芷若是否存在:"+strings.contains("周芷若"));//false
/*删除元素*/
System.out.println("删除赵敏:"+strings.remove("赵敏"));
System.out.println("删除后的元素:"+strings);//张无忌
/*添加元素*/
strings.add("周芷若");
/*判断集合中几个元素*/
System.out.println("集合中有:"+strings.size()+"元素");/*2个元素*/
/*Object[] toArray()转换成一个Object数组*/
Object[] objects = strings.toArray();
for(int i=0;i<objects.length;i++){
System.out.println(objects[i]);
}
//清空集合
strings.clear();
System.out.println("集合中的内容为:"+strings);
/*判断是否为空*/
System.out.println(strings.isEmpty());//true
}
}
集合和数组的区别
-
数组:数组的长度是固定的容器,
-
数组中的存储是同一类元素,可以存储基本数据类型值.集合存储的都是对象,且对象的类型可以不一致,再开发中一般当对象多一点,使用集合进行存储.
集合框架:
-
Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,他有两个重要的子接口.分别是List和Set
1.java.util.List:特点,元素有序,元素可以重复.
List的主要的实现类
-
java.util.ArrayList
-
概述:此类包含用来操作数组的各种方法,比如排序和搜索等,其所有方法均为静态方法,调用起来非常简单.
-
操作数组的方法:public static String toString(int[ ] a),返回指定数组内容的字符串表示形式.
-
public static void sort(int[ ] a):对指定的int类型数组按数字升序进行排序.
-
java.util.LinkedList(双向链表)
-
查询慢,增删改快,但是线程不安全,效率较高
-
简介
- 双向链表实现 List 和 Deque接口。实现所有可选的列表操作,并允许插入null值。
- 所有操作的执行方式与双向链表都是一样的。检索操作依据离两端的距离,从开头或结尾开始遍历列表。
- 此未实现同步,可用List list = Collections.synchronizedList(new LinkedList(...))包装。
- LinkedList是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
- LinkedList 实现 List 接口,能进行队列操作。
- LinkedList 实现Deque接口,即能将LinkedList当作双端队列使用。
- LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
- -LinkedList 实现java.io.Serializable接口,这意味着LinkedList**支持序列化**,能通过序列化去传输。
- LinkedList 是非同步的。
- ArrayList底层是由数组支持,而LinkedList是由双向链表实现的,其中的每个对象包含数据的同时还包含指向链表中前一个与后一个元素的引用。
详细解析:https://blog.csdn.net/shengmingqijiquan/article/details/52640584
ArrayList和LinkedList区别
- Arraylist:底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。例如最坏的情况是删除第一个数组元素,则需要将第2至第n个数组元素各向前移动一位。而之所以称为动态数组,是因为Arraylist在数组元素超过其容量大,Arraylist可以进行扩容(针对JDK1.8 数组扩容后的容量是扩容前的1.5倍),Arraylist源码中最大的数组容量是Integer.MAX_VALUE-8,对于空出的8位,目前解释是 :①存储Headerwords;②避免一些机器内存溢出,减少出错几率,所以少分配③最大还是能支持到Integer.MAX_VALUE(当Integer.MAX_VALUE-8依旧无法满足需求时)。以下是Arraylist部分源码:
源代码:Arraylist扩容
总结:
1.对于随机访问get和Set,ArrayList觉得优于LinkedList,因此LinkedList要移动弄指针。
2.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
效率问题
1.tips
ArrayList是线性代表
get()直接读取第几个下标,复杂度(1)
add(E)添加元素,直接在后面添加,复杂度(1)
add(index,E)添加元素,在后面插入,后面的元素需要移动,复杂度(n)
remove()删除元素,后面的元素需要逐个移动,复杂度(n)
LinkedList是链表的操作
get()获取几个元素 复杂的(n)
add(E)添加到后面,复杂度(1)
add(index E)添加第几个元素后,需要先查找第几个元素,指针指向操作,复杂度(n)
删除元素remove 直接指向操作复杂度(1)
2.java.util.Set:特点,元素无序,而且不可以重复.
Set的主要的实现类有
-
java.util.Hashset
-
java.util.TreeSet