集合

集合:
特点:
1、只能存放引用数据类型的数据
2、长度可变
3、可以同时存放不同类型引用数据类型数据【一般不这么干】
体系:
单列集合【Collection】//顶层接口
有序集合【List】//有序集合的顶层接口
实现类:ArrayList LinkedList
无序集合【Set】//无序集合的顶层接口
实现类:HashSet LinkedHashSet
双列集合【Map】
实现类:
HashMap linkedHashMap Collection:

单列集合的顶层接口 定义单列集合的共性功能//Collection
功能:
add remove clear contains size isEmpty
addAll removeAll containsAll retainAll

数组法
1、调用toArray方法转变为Object数组
2、遍历数组获数据
2、迭代器法
1、调用iterator方法获取迭代器对象
2、利用while循环迭代器对象调用hasNext和next方法 List:
是有序集合的顶层接口 继承Collection的共性功能 还有自己特有 的功能
特点:有序 有索引 元素可重复
特有功能:
add(int index,Object o)
remove(int index)
set(int index,Object o)//插入到指定坐标前面
get(int index)
遍历:数组法 、迭代器法、特有遍历for循环
并发修改异常【ConcurrentModificationException】
原因:迭代器遍历过程中集合对象对数据进行了增删操作解决
1、不使用迭代器遍历
2、使用迭代器对象进行增删操作【ListIterator】 ArrayList:
特点:查询快增删慢
原理:底层是数组结构组成的 数组结构是一个整体 增删的时候涉及 的数组结构
需要移动浪费时间所以就慢,数组结构有索引通过 索引直接定位是数据位置所以
查询快 LinkedList:
有自己的特有方法【转门操作集合首尾元素的】
特有方法:
addFirst addLast removeFirst removeLast
getFirst getLast pop push
特点:
查询慢 增删快
原理:
底层是链表数据结构构成的,查询的时候需要逐个的去查看链 表的节点所以慢,
增删的时候只需要打开原有的节点地址指向 重新链接节点地址指向节点的位置并
没有发生改变所以速度较 快

Set
H3
概述:
他是单列集合无序集合的顶层接口,继承了Collection的所有的共 性功能以及遍
历方式,没有自己独有的方法,所以不需要学习功能
特点:
1、无序
2、无索引
3、元素不可重复
使用场景:
用来对数据进行去重
使用Set集合就需要学习他的实现类,有一个典型的实现类HashSet,HashSet集
合为了实现Set集合的功能而出现的。
Set集合的遍历
H4
1、数组法
1、toArray():把集合变成Object数组 遍历数组获取元素 【集合的元素类型向
上转型 需要向下转型使用】
2、toArray(T[] t):把集合变成指定的类型的数组,再进行遍历
注意:
1、传入的指定的数组的长度正好和集合的长度一致,就把集合 的数据存入传入
的数组中
// show01(list2);// ? 要求必须是Number家族 子类和自己 泛型
的实例化类型是String
show01(list3);// ? 实例化的类型是Number ? 就匹配上了
// show01(list4);// ? 实例化的类型是Object 太老了 ?就匹配不
上了
// show02(list1);// ? 实例化的类型是Integer 太小?就匹配不上

// show02(list2);// ? 要求必须是Number家族 父类和自己 泛型
的实例化类型是String
show02(list3);// ? 实例化的类型是Number 正好?就匹配上了
show02(list4);// ? 实例化的类型是Object 超出预期 ?就匹配上了
}
public static void show(ArrayList<?> list) {
}
public static void show01(ArrayList<? extends Number> list) {
}
public static void show02(ArrayList<? super Number> list) {
}
}2、传入的指定的数组的长度小于集合的长度,集合的数据放 不进传入的数组,
根据传入数组的数据类型和集合的长度作 为依据重新创建一个数组存放集合的数
据 3、
传入的指定的数组的长度大于集合的长度,不需要创建新数 组集合的数据存
入传入的数组中,后面多余的位置使用null 补充
代码示例:
2、迭代器法
和Collection的迭代器遍历是一模一样的
package com.ujiuye.demo;
import java.util.HashSet;
public class SetDemo {
public static void main(String[] args) {
// 使用Set集合
HashSet set = new HashSet();
// 添加数据到集合
set.add(“abc”);
set.add(“abc”);
set.add(“金莲”);
set.add(“大郎”);
set.add(“金莲”);
set.add(“银莲”);
set.add(“黄莲”);
System.out.println(set);
// 数组法遍历
Object[] arr = set.toArray();
for (int i = 0; i < arr.length; i++) {
// String str = arr[i];// 把数据类型提升Object
System.out.print(arr[i] + " ");
}
System.out.println();
// 数组法二:
// String[] arr1 = new String[set.size()];
//String[] arr1 = new String[2];
String[] arr1 = new String[7];
String[] arr2 = set.toArray(arr1);
for (int i = 0; i < arr2.length; i++) {
String str = arr2[i];// 数据类型还是原来的类型
System.out.print(str + " ");
}
System.out.println();
}
}

增强for
概述:
是一种固定格式的遍历方式,可以遍历所有容器【数组和集合】
底层其实还是迭代器遍历,使用的时候不能使用集合对象进行增删操 作,迭代器
对象我们不知道一般增强for遍历不会对集合进行增删操 作,主要就是查看数据
和获取数据
格式:
for(数据类型 变量名 : 容器名){对数据的操作逻辑}
格式解释:
数据类型:遍历的容器中存放数据的类型
变量名:存放每次遍历获取到的数据
容器名:要遍历的容器

// foreach 【增强for遍历】
for (String str : set) {
System.out.print(str + " ");
}
System.out.println();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值