集合
注意:Collection和Map都是接口,不可以直接使用
- 单列集合Collection:线性结构
- list:集合内数据可以重复
ArrayList
LinkedList - set:集合内数据不可重复
HashSet
TreeSet
- list:集合内数据可以重复
- 双列集合Map:表单结构
HashMap
Collection集合
比较特别的是,Collection不可以通过at(下标)直接访问,需要借助迭代器
package TempAndTest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class test1 {
public static void main(String[] args){
// 多态创建对象,Collection——>list——>ArrayList
Collection<String>c=new ArrayList<String>();
c.add("a1");
c.add("a2");
System.out.println(c);
// Collection中的方法没啥特别的,和集合的方法一模一样
c.remove(0);
c.size();
c.clear();
c.isEmpty();
c.removeAll(c);
//**********************************
// 迭代器iterator
//**********************************
c.add("a1");
c.add("a2");
c.add("a3");
Iterator<String> it =c.iterator();
// Iterator的方法
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.hasNext());//是否为空
}
}
List集合
同Collection,是个接口,不可以直接被实例化,但可以被多态创建,继承后创建
两大特点:有序,可存储重复数据,索引操作要保证索引存在
List特有方法:
指定位置加入对象,不可以越界跳远
void add(int,object)
移除指定位置的对象,并且返回
object remove(int)
修改指定索引处的对象
object set(int,object)
获取指定索引处的对象
object get(int)
List并发修改异常
原因是add和Iterator迭代器同时使用,造成预计修改次数与实际修改次数不符
这个设计绝对容易出bug,A用的add方法,B用的迭代器,一组合起来就炸了
ListIteratorLIst类型的特有迭代器(是不是每个类型都给搞个迭代器?)
ListIterator迭代器修改了,不会发生并发修改异常
特有方法
返回上一个元素
object previous()
是否有上一个元素
hasprevious()
增强for循环
确实好用,其内部原理还是迭代器
package TempAndTest;
import java.util.ArrayList;
import java.util.List;
public class test1 {
public static void main(String[] args){
//***************
// 增强for循环
//***************
// 属于是for的特殊用法
//操纵对象可以是数组,也可以是list
int []a=new int[3];
for (int b:a)
{
System.out.println(b);
}
List<String>list =new ArrayList<String >();
list.add("a1");list.add("a2");list.add("a3");
for (String s:list)
{
System.out.println(s);
}
}
}
list遍历方式:
增强for遍历,for遍历,迭代器遍历