集合体系结构、Collection集合概述及常用方法(附迭代器遍历对象实例)、List(附子类LinkedList、ArrayList特点)、ListIterator、并发修改异常、增强for

集合

Collection

所在包:java.util
Interface Collection<E>

创建对象方法代码实例:

创建对象(多态创建):
Collection<E>
创建一个ArrayList对象
Collection<String> c = new ArrayList<String>();
//添加元素方法 boolean add(E e);
c.add("hello");
c.add("world");
System.out.println(c);
输出结果
[hello,world]

常用方法:

方法名 作用
boolean add(E e) 添加元素
boolean remove(Object o) 从集合中移除指定元素
void clear() 清空集合
boolean contains(Object o) 判断集合中是否有该元素
boolean isEmpty() 判断集合是否为空
int size() 返回集合大小

注:集合的遍历一般使用集合迭代器进行
Collection的遍历:

Collection<String> c=new ArrayList<String>();
Iterator it=c.iterator();  //Iterator<E> iterator():返回此集合中的迭代器,通过iterator()方法得到
it.next();   //E next():返回迭代中的下一个元素 (第一个next()得到的是集合中的第一个值)
it.hasNext();    //boolean hasNext():判断下一个迭代中有无更多元素,下一个数存在则返回true

用iterator()得到的迭代器 it 遍历集合中的元素:

while(it.hasNext()){
   
	String s=it.next();
	System.out.println(s);
}

插播一条小知识:

遍历学生对象的小案例:

Public static void main(String[]args){
   
	Collection<Student> c = new ArrayList<Student>();      //1.创建集合对象
	Student student1 = newStudent("张三",12345,99);     //2.创建学生类对象
	Student student2 = newStudent("李四",12345,95);
	Student student3 = newStudent("王五",12345,90);
	c.add(student1);                  //利用add()方法将学生类对象添加到Collection集合中
	c.add(student2);
	c.add(student3);
	Iterator<Student> it = c.iterator();       //创建集合c的迭代器对象
	while(it.hasNext()){
                         //利用while(it.hasNext())遍历迭代器
		Student s = it.next();
		System.out.println(s.getName()+","+s.getId()+","+s.getScore());
	}
}

List

所在包:java.util
public interface List<E>  extends Collection<E>
常用方法(与Collection类似):add(E e)、remove(E e)、contains(E e)、isEmpty()、size()、clear().
初始化:List<E> s = new ArrayList<E>();

List常用特有方法

方法名 作用
Object get(int i) 返回此列表的元素在指定的位置

代码实例:

List c=new ArrayList();
        c.add(1);
        c.add(2);
        c.add(3);
        Object o = c.get(2);
        System.out.println(o);
输出结果:
3

ListIterator

通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
	所在包:java.util
	pulic interface ListIterator<E> 
		  extends Iterator<E>
	用于允许程序员沿**任意方向**遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。

List集合子类(LinkedList、ArrayList)的特点:

  • ArrayList:相当于顺序表,增删O(n),查询(1)。
  • LinkedList:相当于链表,增删O(1),查询O(n)。
    注意:ArrayList和LinkedList继承了List,所以可以使用List的所有常用方法 包括(add、remove、get、contains、isEmpty、size、clear)

列表迭代器常用方法:

方法名 作用
E next() 返回迭代中的下一个元素
boolean hasNext() 如果迭代具有更多的元素,则返回true
E previous() 返回迭代中的上一个元素
boolean hasPrevious() 如果此列表迭代器在相反方向遍历列表时迭代具有更多的元素,则返回true
void add(E e) 将指定的元素插入列表

常用方法代码实例:

List<String> list = new ArrayList<String>();
List.add("hello");
List.add("world");
List.add("java");
ListIterator<String> it = list.listIterator();     //调用列表迭代器
while(it.hasNext()){
    
	String s = it.next();
	if(s.equals("world")){
   
		It.add("javaee");                  //利用列表迭代器方法add添加元素不会造成并发修改异常
	}
}
System.out.print(list);                   //输出list中的值

并发修改异常

产生原因:迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
解决方案:

  • 迭代器迭代元素,迭代器修改元素
  • 集合遍历元素,集合修改元素(普通for)
    迭代器遍历元素的时候,通过集合是不能修改元素的。

并发错误代码实例:

错误示例:
List<String> t = new ArrayList<String>();
t.add("world");
Iterator<String> it = t.iterator();
while(it.hasNext()){
   
	String s = it.next();       //报错:并发修改异常 ConcurrentModificationExcetion
	if(s.equals("world")){
   
		t.add("javaee");
	}
}
System.out.print(t);           
------------------------------------------------------------------------------------------------
正确改法:
	方法一(普通for循环,用集合自身修改元素):
		List<String> t = new ArrayList<String>();
		t.add("world");
		Iterator<String> it = t.iterator();
		for(int i=0;i<t.size();i++){
   
		    String s = t.get(i);  //List 常用方法 get(i); 返回List中第i个位置的元素
		    if(s.equals("world")){
   
		        t.add("javaee");
		    }
		}
		System.out.print(t);
	方法二(用列表迭代器自身void add(E e)方法修改值):
		List<String> t = new ArrayList<String>();
        t.add("world");
        ListIterator<String> it = t.listIterator();
        while(it.hasNext()){
   
            String s = it.next();
            if(s.equals("world")){
   
                it.add("javaee");       //用迭代器自身修改集合中的值
            }
        }
        System.out.print(t);

增强for循环

增强for概述:

  • 简化数组和Collection集合的遍历
  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器

格式:

for(元素数据类型 变量名:数组或者Collection集合){
	//在此处使用变量即可,该变量就是元素
}

代码示例:

例:
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
for(String s:list){
                //注意增强for的内部原理其实就是一个iterator迭代器
	System.out.print(s);
}
全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务