容器API属于 java.util.* 内

 

重点:1图 1类 3 知识点 6 接口

 

1图:常见的一些接口

 

  • Set:没有顺序且不可以重复。

  • List:有顺序而且可以重复

 

1类:Collections     

 

3知识点:

  1. foreach;
  2. Generic(泛型);
  3. Auto_Boxing/unboxing;

6接口:

  1. collection
  2. Set
  3. List
  4. Map
  5. iterator(遍历容器,有三个方法)
  6. comparable


Collection常用方法:

  • int size()
  • boolean isEmpty()
  • void clear()
  • boolean contains(Object element)
  • boolean add(Object element)
  • boolean remove(Object element)
  • Iterator iterator();
  • boolean containsAll(Collection c)
  • boolean addAll(Collection c)
  • boolean removeAll(Collection c);
  • boolean retainAll(Collection c);
  • Object[] toArray()

 

注意:语法(... instanceof ...)判断一个类是否是另一个类

if(Obj instanceof Name){

    Name a =(Name)obj;

}

Collection c = new ArrayList<***>();

//父类引用指向子类对象,访问不了子类的方法(设计模式相关) //方便以后换

顺带一提:面向对象着重类与类之间的各种关系,而面向对象的三大特点:封装,多态,继承。

 

 


Iterator 接口 

有多态的存在(多态存在的三大条件:有继承、有重写、有父类引用指向子类的对象)

Iterator 存在于每个实现了Collection接口的容器中,他们可以返回一个实现了Iterator接口的对象。

 作用:迭代器,遍历容器内的元素。

Iterator常用方法:

  • boolean hasNext();  判断游标右边是否有元素
  • Object next()           返回右边右边的元素并且下移一个游标
  • void     remove()     删除游标左边的元素,执行完next之后该操作只执行一次(迭代过程中删除元素唯一的安全方法

Iterator 方法的运用

import java.util.*;

class Test{

    public static void main(String[] args){

        HashSet<Name>c = new HashSet<Name>();

        c.add(new Name("f1","l1"));c.add(new Name("f2","l2"));

        for(Iterator<Name> i =c.iterator();i.hasNext();){

            Name n = i.next();

            System.out.println(n.firstname+" "+n.lastname);

        }

    }

}

class Name{

    String firstname,lastname;

    Name(String firstname,String lastname){

        this.firstname = firstname;

        this.lastname  = lastname;

     }

}

 

Collection<Name> c = new HashSet<Name>();

c.add(new Name("fff1","lll1"));

c.add(new Name("f2","l2"));

c.add(new Name("fff3","lll3"));

for(Iterator<Name> i =c.iterator();i.hasNext();){

    Name n = i.next();

    if(n.getFirstName().length()<3){

    i.remove();

    }

}

System.out.println(c);

 

 


增强的for循环

只能简单遍历并且读出其中的内容。

int[] arr = {3,4,5,6,7};

for(int i :arr){

    System.out.println(i);

}

import java.util.*;

Collection<String> c = new ArrayList<String>();

c.add("aaa");c.add("bbb");c.add("ccc");

for(String s: c){

    System.out.println(s);

}

 

 


Set(HashSet) 

(没有顺序且不可以重复)

 

Set<String> s = new HashSet<String>();

s.add("aaa");

s.add("aaa")://!!!这句话不会被执行

 

若 S1:[a,b,c]  s2:[b,c,d]

s1.addAll(s2);   s1:[a,b,c,d]  /(就像集合里面的求交集)

Set<String> Sn  =new HashSet(s1); Sn.retainAll(s2);   sn:[b,c]

 

 


Map接口

 (HashMap,TreeMap(二叉树,红黑树))

存储  键-值(key-value)

注意:键值不能重复:所以修改了equal,就必须修改HashCode;

常用的方法:

  • 放入数据:Object put(Object key,Object value);   //如:m1.put("One",1);如果再执行下一条语句m1.put("One",2);会返回原来的值,也就是1;
  • 取出数据:Object get(Object key); //泛型:int i =m1.get("Two");
  • Object remove(Object key);
  • boolean containsKey(Object key);
  • boolean containsValue(Object value);
  • int size();
  • boolean isEmpty();
  • void putAll(Map t);
  • void clear();

import java.util.*;

 

...

 

Map<String.Integer> m1 = new HashMap<String,Integer>();

m1.put("One",1);m1.put("Two",2);m1.put("Three",3);

System.out.println(m1.size());

System.out.println(m1.containsKey("One"));

if(m1.containsValue(1)){

    int i = (Integer)m1.get("Two");

        System.out.println(i);

}

 

 


List(LinkedList,ArrayList):

List<String> l1 = new LinkedList<String>();

for(int i =0 ;i<=5;i++){

    l1.add("a"+i);

}                        //l1:[a0,a1,a2,a3,a4,a5]

l1.add(3,"a100");        //在第四个位置插入a100 l1:[a0,a1,a2,a100,a3,a4,a5]

l1.set(6,"a200");        //把第七个位置的替换为a200  l1:[a0,a1,a2,a100,a3,a4,a200];

String a = l1.get(3);               // 得到第四个元素

int i = l1.indexOf("a3");         // 返回元素a3的位置 下标从0开始

l1.remove(1);

 

 


List容器常用的算法!!!  都在java.util.Collections

 

  • void sort(List)   //升序,如果需要降序,就先升序再逆序
  • void shuffle(List)  //随机排序
  • void reverse(List) //逆序排序
  • void fill(List,Object) //用一个特定的对象重写整个List容器
  • void copy(List dext,List src) //将后者拷贝给前者
  • int    binarySearch(List, Object) 如:int a=binarySearch(l1, "a5");  //(!!必须先排序,才可以用此方法查找!!)

 

特别注意:

   要用到以上的方法,应该这样写: Collections.sort(l1);    Collections.reverse(l1);.......

 


Comparable 接口   

 属于 java.lang.Comparable (所有可以“排序”的类都实现了java.lang.Comparable接口)

要想使一个类实现implements这个Comparable<E>接口,必须在类里面重写 compareTo(Object obj) 这个方法

利用comparable,实现类对象的排序方式

public int compareTo(Object obj){

    this = = obj ;返回0

    this>obj;返回大于0

    this<obj;返回小于0

}

举个例子: 使多个姓名按照英文字母排序

class Name implements Comparable<Name>{

   String firstname,lastname;

      Name(String firstname,String lastname){

      this.firstname = firstname;

      this.lastname  = lastname;

     }

 

    public int compareTo(Name n){

        //(有了泛型可以省略)Name n = (Name)o

        int lstcmp = lastname.compareTo(n.lastname);

        return (lastcmp!=0?lastcmp:firstname.compareTo(n.firstname));

    }

}

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐