上一节粗略的记录了关于Collection接口的小方法,Collection有两个子接口List和Set
List接口
- 元素存储有序的集合
- 带索引
- 集合中可以有重复的元素
- 常用的子类ArrayList和LinkedList
List的方法
add、remove、set(int dex,Object e)、get()
ArrayList
底层采用数组结构
add() //将元素插入到指定的索引上
public static void fun(){
//声明创建ArrayList对象list,实现list接口
List<String> list=new ArrayList<String>();
list.add("浪潮却渴望重回土地");
list.add("在绿树白花的篱前");
list.add("曾那样轻易地挥手道别");
System.out.println(list);
//add(index,"") 将元素插入到索引0的位置
list.add(0,"溪水急着要流向海洋");
System.out.println(list);
}
显示结果:
[浪潮却渴望重回土地, 在绿树白花的篱前, 曾那样轻易地挥手道别]
[溪水急着要流向海洋, 浪潮却渴望重回土地, 在绿树白花的篱前, 曾那样轻易地挥手道别]
set() 修改指定索引上的元素 返回值是被修改的元素
public static void fun1(){
List<String> s=new ArrayList<String>();
s.add("悄悄是别离的笙箫");
s.add("沉默是今晚的康桥");
String s1=s.set(0,"再别康桥");
//返回的是修改前的元素
System.out.println(s1);
//输出修改后的集合
System.out.println(s);
}
显示结果:
悄悄是别离的笙箫
[再别康桥, 沉默是今晚的康桥]
remove() 移除指定索引上的元素 返回值是被删除的元素
public static void fun2(){
List<String> list=new ArrayList<String>();
list.add("我希望逢着");
list.add("一个丁香一样地");
list.add("结着愁怨的姑娘");
String s=list.remove(0);
//返回的是被移除的元素
System.out.println(s);
//输出删除后的集合
System.out.println(list);
}
显示结果:
我希望逢着
[一个丁香一样地, 结着愁怨的姑娘]
get() 普通的for循环遍历
public static void fun3(){
List<String> list=new ArrayList<String>();
list.add("I");
list.add("love");
list.add("java");
//判断集合中是否有"love",假如有,把"very much"放进集合中
for (int i = 0; i <list.size() ; i++) {
if((list.get(i)).equals("love")){
//如果有love,则输出"love",没有则不执行括号里的代码段
System.out.println(list.get(i));
list.add("very much");
}
}
System.out.println("=========================");
//把添加后的元素一同遍历输出
for (int i = 0; i <list.size() ; i++) {
System.out.println(list.get(i));
}
}
显示结果:
love
=========================
I
love
java
very much
增强型for循环
迭代器的并发异常 、增强型for循环 ,在遍历或者过程中对集合进行增删,都会发生异常
public static void fun4(){
List<String> list=new ArrayList<String>();
list.add("I");
list.add("love");
list.add("java");
//增强型for循环不再按照索引遍历集合元素
for(String i:list){
if(i.equals("love")){
list.add("very much");
}
}
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
//对获取的元素 s进行判断 是不是有love
System.out.println(s);
}
}
显示结果:
Exception in thread "main" java.util.ConcurrentModificationException
LinkedList
底层采用连式结构,每次查询都是从头或者尾开始,查询速度较慢
特有的方法removeFirst()、removeLast()
removeFirst() 移除头部元素(removeLast() 移除尾部元素)
public static void fun(){
LinkedList<String> link=new LinkedList<String>();
link.add("每当我听到雨声");
link.add("就像听到了心中的迷茫");
//移除头部元素
link.removeFirst();
System.out.println(link);
[就像听到了心中的迷茫]
getFirst() 获取头部元素 (getLast() 获取尾部元素)
public static void fun1(){
LinkedList<String> link=new LinkedList<String>();
link.add("春眠不觉晓");
link.add("处处闻啼鸟");
if (!link.isEmpty()){
String first = link.getFirst();
System.out.println(first);
}
}
显示结果:
春眠不觉晓
**注意:**对集合进行操作,要先判断集合是否为空,如果集合为空,直接对集合进行操作,会抛出异常
public static void fun1(){
LinkedList<String> link=new LinkedList<String>();
// link.add("春眠不觉晓");
// link.add("处处闻啼鸟");
String last = link.getFirst();
System.out.println(last);
if (!link.isEmpty()){
String first = link.getFirst();
System.out.println(first);
}
}
显示结果:
Exception in thread "main" java.util.NoSuchElementException
add() 向集合中添加元素,并使用迭代器遍历
private static void fun2() {
LinkedList<String> link=new LinkedList<String>();
link.addLast("周游世界");
link.addLast("劈柴喂马");
link.addFirst("春暖花开");
link.addFirst("面朝大海");
//迭代器 是一种遍历集合元素的方法
//通过iterator()方法,获得link的迭代器
Iterator<String> it = link.iterator();
//判断集合中对象是否有下一个元素,没有返回false
while(it.hasNext()){
//获取下个元素
String next = it.next();
System.out.println(next);
}
}
显示结果:
面朝大海
春暖花开
周游世界
劈柴喂马