一、集合框架

  集合是ava语言中非常重要的API;

  用来存储多个数据;

  实现了不同的数据结构。

三大接口:

根接口;List、set是常用的子接口,ArrayList、LinkedList、HashSet是其下常用的三个类。

键值对;HashMap是其下常用的类。

  Iterator:遍历集合的迭代接口。

  Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

二、Collection接口

  1、概念

  Collection<E>接口

  Collection即集合,是所有集合类的根接口,同时Collection接口是一个泛型接口。

  方法:

    add(E):添加对象;

    Iterator<E> iterator():生成迭代器对象,进而可 以迭代集合中的元素;

实际大小)。

  2、Collection的子接口

有序的集合,元素有序存入;

无序无重复的集合,即存入的元素不重复;

     Queue:队列,jdk1.5版本新增接口,Queue实现了“先进先出”(FIFO)的存储结构,具有所有集合基本操作,Queue还提供了一些新的插入、提取、查询等方法。

三、Map接口

  1、Map接口应用

键值对Map<key,Value> ,Key值不允许重复,如果重复,则覆盖。

  常用方法:

     put(K key,V value)该方法可以将key和value存到Map对象;

key值返回对应的value;

     size()返回Map对象中键值对的数量。

  2、Map接口的实现类

元素唯一性;

    TreeMap不仅可以保证key不重复,还可以对value数据进行排序;

    HashTablejdk1.0中定义的类,实现同步。

四、List接口

  1、概念

索引有关系的,因此List 集合扩展的方法都是与索引有关系的。

  例如: add(int index,E)……添加元素在所对应的 索引位置。

  2、List的实现类

数组方式存储(实际用的最多的集合);

    LinkedList:链表;

    Vector:jdk1.0中的集合,实现了同步。

     a、ArrayList

Java语言中可变长度数组的实现。

  ArrayList的常用方法:

    add(Object  o);->集合中添加数据;

    remove(Object o)->删除集合中的数据;

    add(int  index, Object element)->给集合中某个索引位置添加一个数据;

    get(int index)->获取集合中某个位置的信息。

  ArrayList的应用:

    基本使用:不使用泛型,目前很少用    

public class TestArrayList {
       public static void main(String[] args) { 
        List list= new ArrayList(); 
        list.add("string"); 
        list.add(12);
           list.add('w'); 
      }

可以将任何类型对象都存储进去。

相同类型对象,否则将发生编译错误。

    Test:(运行需要创建User类,写出其有参构造,get、set方法)

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);
     }
     }

     b、LinkedList

链表的方式存放的,每个节点上存放的是数据信息。

  LinkedList的常用方法:

    add(E element)—向链表末尾添加一个新的节点,该节点中的数据是参数element指定的对象;

    add(int index, E element)—向链表的指定位置添加一个新的 节点,该节点中的数据是参数element指定的对象;

  扩展方法:

    addFirst(E element)—向链表的头添加新节点,该节点中的数据 是参数element指定的对象;

    addLast(E element)—向链表的末尾添加新节点,该节点中 的数据是参数element指定的对象。

  LinkedList的应用:

    例如:   

public class TestLinkedList {
    public static void main(String[] args) {
    //创建用户对象
 
    User user=new User("王星");
    //创建集合对象,存放用户对象 
    List<User> list=new LinkedList<User>(); 
    list.add(user);
     }
     }

     c、ArrayList和LInkedList的遍历(迭代器遍历(Iterator)-很少使用:通过集合返回迭代器)

    增强for循环:也是通过迭代器的方法获取信息   

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

    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); 
userList.size();i++){                    //(实际存放的数量)
userList.get(i)); 
        } 
     } 
    }

五、Set接口

  1、概念

    继承了Collection接口,Set中所存储的元素是不重复的,但是是无序的,Set中的元素是没有索引的。

  2、Set集合接口的实现类

比较的是虚地址,可重写equals方法使其同类中的两个对象,并且将属性值都赋值为相同的值,归为同一个对象)

    TreeSet:元素不重复,并且元素实现了排序(通过实现Set的另外的子接口SortedSet接口实现排序)

          可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。

  3、HashSet和TreeSet

    HashSet的常用方法:add(E o)将指定的元素添加到set。

    例如:(与ArrayList是相同的)    

public class TreeSetExemple { 
    public static void main(String[] args) { 
      User user1=new User("张华"); 
      User user2=new User("张星"); 
      Set userSet=new TreeSet(); 
      userSet.add(user1); 
      userSet.add(user2); 
      Set<User> userSet1=new HashSet<User>(); 
      userSet1.add(user1); 
      userSet1.add(user2); 
} 
}

    TreeSet的常用方法:add(E o):将指定的元素添加到 set(如果尚未存在于该set中);

                first():返回已排序set中当前的第一个(最小)元素;

                last():返回已排序set中当前的最后一个(最大)元素。

需要实现Comparable

    例如: 

public class UserInfo implements Comparable<UserInfo> { 
      private String name; 
      private int age; 
      public int getAge() { 
      return age; 
      } 
      public void setAge(int age) { 
        this.age = age; 
      } 
      public String getName() { 
        return name; 
      } 
      public void setName(String name) { 
        this.name = name; 
      } 
      @Override 
判断条件自己定义)
       if(o.getName().equals(name)){ 
        return 0; 
      }else return 1;   
    }
     }
    public class TreeSetExemple { 
    public static void main(String[] args) {
       UserInfo user1=new UserInfo(); 
      user.setName("张华"); 
      UserInfo user2=new UserInfo(); 
      user2.setName("王华"); 
      Set<UserInfo> userSet =new TreeSet<UserInfo>(); 
      userSet.add(user1); 
      userSet.add(user2); 
    } 
    }

  4、HashSet和TreeSet的遍历

     增强for循环    

public class SetExemple { 
    public static void main(String[] args) { 
      User user1=new User(“王辉"); 
      User user2=new User("qw"); 
      Set<User> userSet=newHashSet<User>(); 
      Set<User> userSet=new TreeSet<User>(); 
      userSet.add(user1); userSet.add(user2);
       //增强for循环遍历
      for(User user:userSet ){ 
        System.out.println( user.getUserName()); 
      } 
    } 
    }

六、Map集合的常用实现类

  1、HashMap

顺序是不固定的。

   a、HashMap的常用方法

    put<key,value>—>存放对象;

    get(key);—>获取key所对应的数据;

    keySet() —> 返回此映射中所包含的键的 set 视图。

   b、HashMap的使用

public class HashMapTest { 
    public static void main(String[] args) { 
      User user1=new User("王姐"); 
      User user2=new User("王辉"); 
      HashMap<String,User> map=new HashMap<String, User>(); 
      map.put(“001", user1); 
      map.put(“002", user2); 
    } 
    }(运行需要创建User类,写有参构造set、get、toString方法)

  2、TreeMap

   a、TreeMap的常用方法与HashMap类似

   b、TreeMap的应用

    适用于按自然顺序或自定义顺序遍历键(key);

    TreeMap根据key值排序,key值需要实现Comparable接口,实现compareTo方法。TreeMap根据compareTo的逻辑,对 key进行排序

User user1=new User("王姐"); 
    User user2=new User("王辉"); 
    TreeMap<String,User> tree=new TreeMap<String,User>(); 
    tree.put(“001", user1); 
    tree.put(“002", user2);
    (根据字符串的字典顺序)

    TreeMap排序:

public class ScortInfo implements Comparable<ScortInfo> { 
      private int num; public int getNum() { 
        return num; 
      } 
      public void setNum(int num) { 
        this.num = num; 
      } 
      @Override 
      public int compareTo(ScortInfo o) { 
        Return new Integer(this.num).compareTo(o.getNum()); 
      } 
      public ScortInfo(int num) { 
        this.num = num; 
      } 
    }
    public class TreeMapTest {
      public static void main(String[] args) { 
        User user1=new User("王姐"); 
        User user2=new User("王辉"); 
        TreeMap<ScortInfo,User> tree=new TreeMap<ScortInfo,User>(); 
        tree.put(new ScortInfo(12), user1); 
        tree.put(new ScortInfo(23), user2); 
      } 
     }

  3、TreeMap和HashMap的遍历  

public static void main(String[] args) { 
      User user1=new User("王姐"); 
      User user2=new User("王辉"); 
      HashMap<String,User> map=new HashMap<String, User>(); 
      map.put(“001", user1); 
      map.put(“002", use2); 
      Set set=map.entrySet(); 
      Iterator<Entry<String, User>> it=set.iterator(); 
    while(it.hasNext()){ 
      System.out.println(it.next().getValue().getUserName()); 
    } 
    TreeMap<String,User> tree=new TreeMap<String,User>(); 
      tree.put(“001", user1); 
      tree.put(“002", user2); 
      Set se=tree.entrySet(); 
      Iterator<Entry<String, User>> iter=se.iterator(); 
    while(iter.hasNext()){ 
      System.out.println(iter.next().getValue().getUserName()); 
    } 
    }(伪代码)