day10 集合的基本概念

集合

1 概述

数组的特点:
长度固定 存储同一数据类型 基本数据类型和引用类型 元素就是一个值数组的缺陷:
1)不能改变长度
2)只能存储一种数据类型的数据
3)数组的元素只能是一个值,不能是一对值针对数组的不足,java提供了集合根据存储数据的不同,java封装了不同的集合(容器)

2 集合的分类

在这里插入图片描述
1)Collection里面存储的元素是一个值,所以它叫单列集合,他是个接口
2)Map中存储的元素是一对数据,叫双列集合,他是个接口
3)Collection的子接口是list和Set
4)List中存储的元素是有序的,可以是重复的
5)Set中存储的元素是无序的,是不能重复的
{
1)所有集合中存储的元素,可以是不同类型的,但是只能是引用类型,不能是基本数据类型
2)所有集合的长度是不固定的
}

3 Collection

3.1 增

Collection cc = new ArrayList();
// 添加
cc.add("one");
cc.add(2);
cc.add("three");
// 将另一个集合中的元素存储到当前集合中
Collection c2 = new ArrayList();
c2.add(4);
c2.add("five");
cc.addAll(c2);

3.2 删

//清空
// cc.clear();
// 移除单个元素
// cc.remove("one1");
Collection c3 = new ArrayList();
c3.add("one");
// 移除和另一个集合中相同的所有元素
// cc.removeAll(c3);
// 保留和另一个集合中相同的所有元素
cc.retainAll(c3);

3.4 查

// 判断是否包含某个元素
System.out.println(cc.contains("one"));
// 是否包含另一个集合中的全部元素
System.out.println(cc.containsAll(c2));
// 判断是否是空集合
System.out.println(cc.isEmpty());
// 获取集合长度
System.out.println(cc.size());
// 将集合转变成数组
Object[] objects = cc.toArray();
System.out.println(Arrays.toString(objects));

3.5 迭代器

在集合中需要一个一个遍历集合中的元素,将遍历的动作封装成接口Iterator接口
在Collection中提供了一个方法iterator()方法,就能返回一个Iterator接口的实例化对象
在这里插入图片描述
在这里插入图片描述

// 遍历集合
Iterator iterator = collection.iterator();
// 获取元素
while (iterator.hasNext()) {
Object object = iterator.next();
System.out.println(object);
// 移除元素
if (object.equals("one")) {
iterator.remove();
}
}

迭代器是遍历集合的一种方式

3.5.1 ***遍历集合
1*迭代器
2)集合转变成数组,遍历数组即可
// 转变成数组
Object[] objects = collection.toArray();
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
3*使用增强版for循环
for (Object obj : objects) {
System.out.println(obj);
}
for (Object obj : collection) {
System.out.println(obj);
}

增强版for循环只能用于集合和数组
格式:for(元素类型 变量名:集合对象、数组对象){
//使用 变量名代表每一个元素名

Collection collection = new ArrayList();
collection.add(1);
collection.add(2);
collection.add("3");
for (Object obj : collection) {
if (obj instanceof Integer) {
Integer integer = (Integer) obj;
System.out.println(integer.floatValue());
} else if (obj instanceof String) {
Integer integer = Integer.valueOf((String) obj);
System.out.println(integer);
}
}

4 List

1)有序的,元素的存储位置是有序的,可以根据下标访问元素
2)列表通常允许重复的元素,允许多个 null 元素。

// 往哪个下标处添加元素
list.add(1, 3);
System.out.println(list);

// 移除
// list.remove("one");
// 移除下标处的元素
list.remove(2);

// 修改
list.set(2, "three");
System.out.println(list);

// 获取某个下标处的元素
System.out.println(list.get(2));
// 获取某个元素第一次出现的索引
System.out.println(list.indexOf(3));
// 获取某个元素最后一次出现的索引
System.out.println(list.lastIndexOf(3));
// 截取集合中的某些数据形成新的集合
List list2 = list.subList(1, 4);

遍历list 集合

1 迭代器

Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Object object = iterator.next();
}

2 ***for循环

for (Object object : list) {
System.out.println(object);
}

3 转变成数组

Object[] objects=list.toArray();
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}

4 ***集合下标进行遍历

for (int i = 0; i < list.size(); i++) {
Object object = list.get(i);
System.out.println(object);
}

5 ListIterator

是Iterator的子接口,添加了一些新的功能

package com.cn;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
5 ArrayList
6 Linkedlist
public class ListTest2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("one");
list.add(21);
list.add("three");
list.add(42);
ListIterator iterator = list.listIterator();
while (iterator.hasNext()) {
// 获取下标 在调用next()之前获取
int index = iterator.nextIndex();
System.out.println(index);
Object object = iterator.next();
System.out.println(object + "---");
// 添加
if (index == 1) {
iterator.add("qq");
}
// 修改 在调用了add或remove之后,不能执行set方法
// iterator.set("ff");
}
System.out.println(list);
}
}

5 ArrayList

1)数组结构的方式存储数据的
2)不同步的
3)Arraylist的元素是有初始容量的,容量不够了,会自动扩充,扩充为原来的1.5倍

6 Linkedlist

1)是链表存储数据的
2)每存储一个元素,会存储两个数据,一个是添加的元素本身的数据,另一个是下一个元素会存储的位置,这
样,下次再次存储数据,就知道往那块存了,即形成一个链表结构的集合
在这里插入图片描述

***ArrayList和LinkedList,Vector的区别

1)ArrayList,Vector是数组结构存储数据的,linkedList是链表结构存储数据的
2)ArrayList,Vector的查询效率高,增删效率低
3)LinkedList的查询效率低,但是增删效率高
4)ArrayList是不同步的,线程不安全的,执行效率高的,Vector是同步的,线程安全的,执行效率低的
5)ArrayList的容量每次扩充,扩充到原来的1.5倍,Vector每次扩充2倍
6)ArrayList是jdk1.2版本的,Vector是1.0版本的

LinkedList的特殊方法

LinkedList linkedList = new LinkedList();
linkedList.add("one");
linkedList.add("two");
linkedList.add("three");
System.out.println(linkedList);
// 添加
linkedList.addFirst("qq");
linkedList.addLast("ff");
System.out.println(linkedList);
// 获取
System.out.println(linkedList.getFirst());
System.out.println(linkedList.getLast());
// 删除
linkedList.removeFirst();
linkedList.removeLast();
System.out.println(linkedList);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值