黑马程序员认识List和Set集合

来源:互联网 发布:java项目开发案例书籍 编辑:程序博客网 时间:2024/05/17 23:36
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一个程序的运行,其实就是数据在做着不断的变化,基本数据类型有8种,byte short  int  long  char  boolean float double 这些数据可以用数组来存储,数组中存放的是基本数据类型,引用类型的该如何存储呢?首先引用类型包括:类,数组,接口  可以用集合来存储。集合容器因为数据结构不同,不断向上抽取,形成集合框架,框架的顶层是collection接口,既然是顶层接口就有子接口和实现该接口的类,其中List 接口中存储的元素可重复,是有序的,可以对列表中的每个元素精确的定位。而Set接口的存储的元素不允许重复,是无序的,和collection接口中的方法一致

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
class Student2{
 String name;
 int age;
 Student2(String n,int a){
  this.name=n;
  this.age=a;
 }
 public String toString(){
  return "姓名:"+name+"年龄:"+age;
 }
}
public class CollectionDemo { 
 public static void main(String[] args) {
       List<Student2> list=new ArrayList<Student2>();//接口子类实例化
       //向集合中添加student对象
       list.add(new Student2("mike",23));
       list.add(new Student2("lili",21));
       list.add(new Student2("keko",24));
       list.add(new Student2("lili",21));
       //添加元素后的集合,允许重复元素
       System.out.println("list:"+list);
       //移除第0角标元素
       list.remove(0);
       //修改1角标元素为指定元素
       list.set(1, new Student2("wangcai",20));
       //获取0角标元素
       list.get(0);
       //获取指定元素第一次出现的位置
       int a=list.indexOf(new Student2("lili",21));
       System.out.println(a);
       //判断
        list.isEmpty();
        list.contains(new Student2("keko",24));
       //其它
       list.size();      
       list.toArray();
       System.out.println("修改后的list:"+list); 
      
       Set<Integer> set=new HashSet<Integer>();//接口子类实例化    HashSet内部数据结构是哈希表
       //向集合中添加Integer类型对象
       set.add(1);
       set.add(3);
       set.add(4);
       set.add(1);
       //添加元素后的集合,允许重复元素
       System.out.println("set:"+set);
       //删除
       set.remove(1);
       //判断
       set.contains(3);      
       set.isEmpty();
       //其它
       set.size();
       set.toArray();
       System.out.println("修改后的set:"+set);//集合中的元素不允许重复。
 }
}

list和set接口中都有对数据添加,删除,获取,判断的功能,list集中有修改set()功能,而set集合中没有修改功能,其中他们都有带有一个迭代器功能,返回集合中的所有元素。iterator不仅具有迭代功能还是一个接口类型,list集合中不单有iterator 还有接口的子接口listIterator,Ierator只有hasNext()   next()  remove()的功能,所以在迭代过程中不能对集合中的元素进行增加或修改等,而listIterator则具有这个功能,有添加和修改add()  set()  还有逆向遍历hasPrevious(); previous(); nextIndex(); previousIndex()

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo {
 public static void main(String[] args) {
        List<Character> list=new ArrayList<Character>();
        list.add('a');
        list.add('b');
        list.add('c');
        list.add('d');
        Iterator<Character> it=list.iterator();
        while(it.hasNext()){
         Object b=it.next();//java.util.Concurrent Modification Exception并发修改异常
         if(list.contains('b')){
          list.remove(b);
         }
         System.out.print(b);
        }       
 }
}

在迭代list集合时,对集合中的元素进行操作,迭代器并不知道,会引起并发修改异常

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class IteratorDemo {
 public static void main(String[] args) {
        List<Character> list=new ArrayList<Character>();
        list.add('a');
        list.add('b');
        list.add('c');
        list.add('d');
        ListIterator<Character> it=list.listIterator();
        while(it.hasNext()){
         Character cc=it.next();
         if(cc.equals('a')){//如果迭代返回的元素有‘’
          it.set('e');//修改为'e'
         }
        }       
        System.out.print(list);
 }
}

输出结果:[e, b, c, d]
0 0
原创粉丝点击