java 集合概览
Java是面对对象的语言,我们在编程的时候自然需要存储对象的容器,数组可以满足这个需求,但是数组初始化时长度是固定的,但是我们需要一个长度可变化的容器,因此,集合诞生了。
Java集合,也叫做容器,主要是由两大接口派生而来:
- Collection 接口,主要用于存放单一元素;
- Map 接口,主要用于存放键值;
Java集合框架如下图:
集合和数组的区别
集合 | 数组 | |
---|---|---|
长度 | 可变 | 固定 |
内容 | 储存不同类型元素 | 存储只可单一类型元素 |
元素 | 只能存储引用类型元素 | 可存储引用类型,也可存储基本类型 |
为什么要使用集合?
当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器去保存的,这个容器就算数组,但是用数组具有一定的弊端,因为我们在实际开发中,储存的数据的类型是多种多样的,于是就出现了“集合”,集合的作用和数组一样,也是用来存储多个数据的。
数组的缺点是一旦声明之后,长度将无法改变;同时,也决定了该数组存储的数据的类型;而且数组存储的数据是有序的、可重复的、特点单一,集合提高了数据存储的灵活性。
Collection
参数类型
E
- 此集合中元素的类型
所有的父级接口:
Iterable <E>
方法和作用
增删改查:
返回类型 | 方法名 | 作用 |
---|---|---|
boolean | add() | 增加一个元素进入集合 |
void | clear() | 清空整个集合 |
boolean | contains(Object o) | 判断是否包含该元素 |
int | hashCode() | 返回集合的哈希值 |
boolean | isEmpty() | 返回集合是否为空 |
boolean | remove(Object o) | 删除指定元素 |
int | size() | 返回集合元素个数 |
集合间直接相加或减的方法:
代码:
/*————————————————
版权声明:本文为CSDN博主「WeirdoX26」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46647863/article/details/122619559
*/
public class CollectionTest01 {
public static void main(String[] args) {
//创建一个集合对象
//Collection c = new Collection(); 接口是抽象的,无法实例化。
Collection c = new ArrayList();
/*
boolean add(E e) 向集合末尾中添加元素
*/
c.add(1200);
//自动装箱,实际上是放进去了一个对象的内存地址。
//Integer x = new Integer(1200)
c.add(new Object());
c.add(3.14);
c.add(true);//自动装箱
/*
boolean remove(Object o) 删除集合中的元素o,删除成功返回true
*/
System.out.println(c.remove(1200));//true
/*
int size() 获取集合中元素的个数
*/
System.out.println("集合中元素的个数是:"+c.size());//3
/*
void clear() 清空集合
*/
c.clear();
System.out.println("集合中元素的个数是:"+c.size()); //0
/*
boolean contains(Object o)
判断当前集合中是否包含元素o,包含返回true,不包含返回false
*/
c.add("钢铁侠");
c.add("蜘蛛侠");
c.add("美国队长");
System.out.println(c.contains("钢铁侠"));//true
System.out.println(c.contains("蜘蛛侠"));//true
/*
boolean isEmpty() 判断集合是否为空
*/
System.out.println(c.isEmpty());//false
c.clear();
System.out.println(c.isEmpty());//true
/*
Object[] toArray() 调用这个方法可以把集合转换成数组
*/
c.add("abc");
c.add("def");
c.add(100);
Object[] objs=c.toArray();
for(int i=0;i<objs.length;i++){
System.out.println(objs[i]);
//输出结果:abc def 100
}
/*
boolean addAll(Collection c)
将一个集合中的所有元素添加到另一个集合,添加成功返回true
*/
Collection c1 =new ArrayList();
c1.add("123");
c1.add("456");
Collection c2 =new ArrayList();
c2.add("789");
c2.add("000");
System.out.println(c2.addAll(c1));//true
}
}
Iterator迭代器
Collection c =new ArrayList();
c.add(1);
c.add(2);
c.add(3);
c.add(4);
Iterator it= c.iterator(it.hasNext());
while (it.hasNext()){
//返回it当前值并指向下一个值
Object obj=it.next();
System.out.println(obj);
System.out.println(it.hasNext());
}
true
1
true
2
true
3
true
4
false
List
List接口是有序列表,允许存放重复的元素。
List的三个接口:
List list1 = new ArrayList();
List list2 = new Vector();
List list3 = new LinkedList();
List接口实现类 | ArrayList | LinkedList | Vector |
---|---|---|---|
底层数据结构 | Object[ ]数组 | 双向链表 | Object[ ]数组 |
查询速度 | 快 | 慢 | 快 |
查询效率 | 高 | 高 | 低 |
增删速度 | 慢 | 快 | 慢 |
线程安全性 | 不安全 | 不安全 | 安全 |
可否存储重复元素 | 可以 | 可以 | 可以 |