集合框架1

来源:互联网 发布:数据库数据库系统 编辑:程序博客网 时间:2024/06/06 07:28

Collection 接口是集合框架中的顶级接口,用来保存单独的对象,它又有三个子接口。集合部分能更好 展示接口,子接口,抽 象类,具体类的层次结构。

Collection 接口是所有集合类的跟接口,同时 Collection 接口是一个泛型接口。
方法:
add(E e); 添加对象
Iterator iterator(); 生成迭代器对象,进而可以迭代集合中的元素
int size(); 获取集合中的元素数量

Collection 的子接口:
1)、List 有序的集合,元素有序存入。
2)、Set 无重复的集合,即存入的元素不重复。
3)、Queue 队列,JDK1.5版本新增接口,Queue 实现了“先进先出”(FIFO)的存储结构。Queue是Collection的子接口,具有所有集合的基本操作,除此之外,Queue还提供了一些新的插入、提取、查询等方法。

Collection 接口有两个主要的子接口,即List和Set,这二者存在一些区别。

①、List:

继承了 Collection 接口,并且扩展出属于自己的方法;List 集合中的元素都是与索引有关系的,因此 List 集合扩展的方法都是与索引有关系的。
例如: add(int index,E element) ; 在列表的指定位置插入指定元素。

②、List 是个接口,有三个常用的实现类:

    ArrayList     数组列表,数据采用数组方式存储。           LinkedList      链表    Vector          jdk1.0中的集合,实现了同步 List 是我们常用的集合类型,但是它是接口,不能实例化,需要使用 List 的实现类 ArrayList 才能使用。 1)、ArrayList       ArrayList 被称为数组列表,数据采用数组的方式存储,使用连续内存存储。ArrayList 是       Java语言中可变长度数组的实现。 2)、LinkedList       称为链表,该集合类型实现了“链表”的数据结构。值得一提的是,LinkedList 不仅实现了 List 接       口,还实现了 Queue 接口,可以说链表同时也可以作为一个队列对象使用。使用方式与 ArrayList       类似。   3)、Vector      Vector 是JDK1.0版本中的集合类,后来修改为实现了 List 接口。      Vector 的功能几乎都可以被 ArrayList 替代,主要区别是 Vector 是同步的,而 ArrayList 不是同步的。

③、ArrayList的常用方法
add(Object o); 向集合中添加数据
remove(Object o); 删除集合中的数据
add(int index, Object element); 给集合中某个索引位置添加一个数据
get(int index); 获取集合中某个位置的元素

泛型的使用:对象中只能持有相同类型对象,否则将发生编译错误。

例如:

public class User {            private String userName        //带参的构造器                public User(String userName) {                    super();                    this.userName = userName;                }                //提供 get/set 方法                public String getUserName() {                    return userName;                }                public void setUserName(String userName){                          this.userName = userName;                    }            }
Test:
public class GenericsList {                public static void main(String[] args) {                    //创建用户对象                    User user=new User("张三");                    User user1=new User("李四");                     //创建集合对象,存放用户对象                    List<User> userList=new  ArrayList<User>();                    userList.add(user);                    userList.add(user1);                }            }

④、LinkedList

    LinkedList是以链表的方式存放的,每个节点上存放的是数据信息    常用方法:add(E element); 向链表末尾添加一个新的节点,该节点中的数据是参数 element 指定的对象。         add(int index, E element); 向链表的指定位置添加一个新的节点,该节点中的数据是参数         element 指定的对象。               扩展的方法:addFirst(E element); 向链表的头添加新节点,该节点中的数据是参数 element 指定的对象。                addLast(E element); 向链表的末尾添加新节点,该节点中的数据是参数 element 指定的对象。  LinkedList 的使用与 ArrayList 基本相同    例:      
import java.util.LinkedList;                import java.util.List;                public class TestLinkedList {                    public static  void main(String[] args) {                      //创建用户对象                        User user=new User("王星");                        /创建集合对象,存放用户对象                        List<User> list=new LinkedList<User>();                        list.add(user);                    }                }

一、ArrayList和LinkedList的遍历:

①、for循环遍历:通过索引值获取所对应的数据信息
例如:

public class GenericsList {              public static void main(String[] args) {                //创建用户对象                User user=new User("张三");                User user1=new User("李四");                 //创建集合对象,存放用户对象                List<User> userList=new ArrayList<User>();                                                         userList.add(user);                userList.add(user1);                for(int i=0;i<userList.size();i++){                  System.out.println(userList.get(i));                    }                }            }

②、增强for循环的遍历:(做简单遍历读取,增强for循环确实减轻不少的代码量)也是通过迭代器的方法获取信息
例如:

public class GenericsList {                public static void main(String[] args) {                    //创建用户对象                    User user=new User("张三");                    User user1=new User("李四");                     //创建集合对象,存放用户对象                    List<User> userList=new LinkedList<User>();                    userList.add(user);                    userList.add(user1);                    for(User userInfo:userList){                        System.out.println(userInfo);                        }                    }                }

③、除了 for 循环,增强 for 循环外,还可以使用 Iterator 访问集合,尤其对 Map 来说,比较常用。

    迭代器遍历(Iterator)--很少使用,通过集合返回迭代器。    Iterator接口        实际应用中,常常需要对集合元素进行迭代,Iterator 接口提供了迭代集合对象的功能,是一个泛型接口.  常用方法:            hasNext(); 此方法用来判断被迭代的集合中是否存在元素。            next(); 返回集合中的当前元素.    迭代器访问 Collection 集合              Collection 对象都有返回 Iterator 的方法,因此都可以用迭代器来进行遍历。    List集合:
 public static void main(String[] args) {                           //创建用户对象                           User user1=new User("张三");                           User user2=new User("李四");                            //创建集合对象,存放用户对象                           List<User> userList=new ArrayList<User>();                           //List<User> userList=new LinkedList<User>();                           userList.add(user1);                           userList.add(user2);                           Iterator<User> userIter=userList.iterator();                           while(userIter.hasNext()){                              User userInfo=userIter.next();                           }                      }

Set集合:

public static void main(String[] args) {                              User user1=new User("qw");                              User user2=new User("er");                              User user3=new User("rw");                              Set<User> userSet1=new HashSet<User>();                              //Set<User> userSet1=new TreeSet<User>();//TreeSet中存储的对象必须实现Comparable接口                              userSet1.add(user3);                              userSet1.add(user1);                              userSet1.add(user2);                              Iterator<User> it= userSet1.iterator();                                while(it.hasNext()){                                      System.out.println(it.next().getUserName());                                      }                             }
0 0