一、定义
集合:在程序中可以保存数目不确定的对象,可以存储任意类型的对象,并且长度可变 位于java.util包内
二、分类
一、单列集合Collection
Collection List Set ArrayList LinkedList Vector HashSet TreeSet LinkedHashSet
1、List(为接口,要在实例化中进行操作以下两个就为实例化)
1)ArraryList
底层是数组结构实现的,数组有索引,查询速度比较快,增删比较慢 使用场景:如果大量的数据经常做查询的操作,优先使用ArrayList
//1.创建容器
ArrayList<String>l1=new ArrayList<>();
<数据类型>这个为泛型
约束集合可以存储的数据类型//2.向集合中添加数据
l1.add(Object o); void add( int index,Object element) 向指定索引位置添加元素
//3.查看集合长度
l1.size();
//4. 删除指定索引处的值,放回被修改的元素
l1.remove(0);
//5.查询指定元素第一次出现索引的位置
int indexOf(Object o)
//6.查询指定元素最后一次次出现索引的位置
int lastIndexOf(Object o)
//7.获取指定索引范围的集合元素,返回新的集合
List subList (int fromIndex,int toIndex)
//这个索引范围 包括前一个数,不包括后一个数【 1,3 )
//8.返回指定索引位置处的元素。
Object get(int index)
其他方法可以查看API查看
2)LinkedList
LinkedList类是List接口的一个具体实现类
LinkedList 类用于创建链表数据结构
插入或者删除元素时,它提供更好的性能
2、Set
Set接口存储一组唯一,无序的对象、没有索引
HashSet、TreeSet是Set接口常用的实现类
1 ) HashSet
HashSet 元素唯一 底层是哈希表的HashSet 元素不可重复 无序 也就是没有索引 //元素唯一的原理 1.根据对象的哈希值(是调用Hashcode)来计算存储的位置 2.判断当前位置是否有数据 2.1没有:直接存储 2.2有 调用equals()方法来比较属性值 2.2.1属性相同 不存储 2.2.2属性不相同 以链表结构来存储 如果是自定义类型的对象 保存到HashSet集合,必须重写hashcode()和equals()方法 LinkedHashSet 可以保证元素的存储顺序
2 ) TreeSet
TreeSet 使用二叉树的方式(红黑树)可以对元素进行排序 升序或者降序TreeSet 对容器中保存的元素进行排序 自然排序 在使用非常用数据类型时 需要添加compareTo接口,重写compareTo方法 编写排序规则 返回值特点 1.返回值为负数、向左存 2、返回值是0,不存储 3、返回值是正数,向右存 比较器排序
二、双列集合Map
用于存储键(key)值(value)映射关系的元素,每个元素都包含一对键值
三、总结
遍历:
1、普通for循环
2、增强for循环
3、迭代器遍历
4、键值对
List:因为底层数据结构,1、2、3都可以使用
Set:因为没有索引,只能使用2、3
Map:2、3、4
1、普通for循环
for (int i = 0; i <l1.size() ; i++) {
System.out.println(l1.get(i));
}
2、增强for循环
for(String a:l1){
System.out.println(a);
}
3、迭代器遍历
迭代器遍历集合 Iterator 集合对象.iterator() 获取迭代器对象 成员方法: boolean hasNext 判断是否还有元素 E next() 获取当前元素 void remove() 删除当前元素
public static void main(String[] args) {
ArrayList<String>l1=new ArrayList<>();
l1.add("张三");
l1.add("李四");
l1.add("王五");
Iterator<String>it =l1.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
4、键值对
Set<Map.Entry<String,Student>> keyValues =hashMap.entrySet();
for(Map.Entry<String,Student> me :keyValues){
//获取键
String key =me.getKey();
//获取值
Student student =me.getValue();
System.out.println(key+"-"+student.getName());
}