和数组区别:
1) 数组长度是固定的;
集合长度是不固定的,是变长;
2)数组可以存储基本类型 和 引用类型的数据;
集合 只能存储引用类型的数据。
家族成员:
Collection接口:单列存储。数据可以重复存储。
List接口 (线性表): 数据可以重复存储,有顺序的,线性排列。
List的常用方法:
package com.yaojun.day4;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class TestJH {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> al = new ArrayList<>();
// 1. 向指定的位置添加元素
al.add("妖君");
al.add("平淡");
al.add("一般");
al.add(2, "慢慢");
// 2. 获得索引位置的元素
al.get(1);
// 3. 用第二个参数的元素 替换 索引位置的元素
al.set(2, "成长");
// 4. 取子集 【起始,终止)
al.subList(1, 2);
// 5. 排序
al.sort(null);
al.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o2.compareTo(o1);
}
});
//al.sort((s1,s2)->s2.compareTo(s1));
System.out.println(al);
}
}
2.3 集合遍历
List遍历有:for循环 foreach forEach
//增强for遍历
for (String string : al) {
System.out.println(string);
}
//forEach遍历
al.forEach(new Consumer<String>() {
@Override
public void accept(String t) {
// TODO Auto-generated method stub
System.out.println(t);
}
});
//lambda形式
al.forEach((s)->System.out.println(s));
//极简方式
al.forEach(System.out::println);
迭代器:
就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。
Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。
因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作更为简单,Java引入了迭代器模式!
2.3.1 Iterator
Iterator<String> i = al.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
2.3.2 ListIterator
只能遍历 List类型的集合
ListIterator<String> li = al.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}
while(li.hasPrevious()){
System.out.println(li.previous());
}