黑马程序员JAVA篇--集合框架

 

 

1.集合概述

 |与数组的区别:  1、集合的长度是可变的,数组的长度是固定的  2、集合专门存储对象不能存储基本数据类型,数字可以存储对象也可以存储基本数据类型

2.Collection接口

 |collection中的方法      建立一个集合:Collection coll = new ArrayList;  1、add() 向集合中添加对象   coll.add();  2、clean() 移除此collection中的所有元素  3、equals(Object o) 比较collection与指定对象是否相等,区分大小写  4、hashCode() 返回此collection中的哈希码值  5、isEmpty() 如果此collection不包含元素则返回true  6、iterator() 返回此collection的元素上进行迭代的迭代器(迭代器较重要,后面单独说)  7、remove() 移除指定元素  8、size() 返回Collection中的元素个数  9、toArray() 返回包含此collection中所有元素的数组  10、contains(Object o)如果collection中包含指定的元素返回true             迭代器         迭代器   Collection中的一个共性方法 返回值类型是一个接口类型 接口是Iterator      此方法用于取出集合中存储的对象的方法             方法的使用:           Collection coll = new Collectin();           Iterator it = coll.iterator();//1.调用集合中的Iterator方法,获取迭代器对象           while(it.hashNext()){//调用迭代器中的hasNext()方法来判断是否有对象被取出        sop(it.next());//调用集合中next方法获取集合中的元素            }

3.List派系   |List派系中的集合容器是有序排列的(怎么存的怎么取出)

  |List派系中允许存储重复的元素

  |List派系中其他特有的方法  1、add(int index,E element) 在列表的指定位置插入指定的元素    2、get(int index) 返回列表指定位置的元素  3、indexOf(Object 0) 返回此列表第一次出现指定元素的索引如果没有返回-1  4、set(int index,E element) 用指定的元素替换指定位置的元素

  |有序的

     |可以重复的

     |LinkedList它是List派系中的一个子类      |线程不同步操作效率高

     |存储到set集合中的对象应该重写hashCode和equals方法     |这个派系没有下标

  |取出方式只能用迭代器不可以和List用for

  |hashSet集合      |调用的是hashMap来实现的      |存储到HashSet中的对象,重写hashCode和equals两个方法  *****         | 重写hashCode方法的实现步骤              将对象中的引用变量取哈希值,基本数据类型直接相加或者相乘   |底层数据结构是二叉树,每一个分支只能分出两个      |覆盖接口中的抽象方法public intcomparaTo(){}          |自定义比较器让TreeSet集合自己进行对象的比较并排序   |自定义比较器以后存储对象的自然顺序不在参考  public class TreeSetDemo{   TreeSet ts = new TreeSet();   ts.add(new Person("zhangsan",22));   ts.add(new Person("lisi",34));   Iterator it = new Iterator();   while(it.hasNext()){    syso(it.next());   }

 }  //定义比较器  class MyCompara implements Coparator{   public int compare(Object o1,Object o2){   Person p1 = (Person)o1;   Person p2 = (Person)o2;   int num = p1.getAge()-P2.getAge();   return num == 0?p1.getName().compareTo(p2.getName()):num;  }    }  public class Person{   private String name;   private int age;   public int compareTo(Object o){

   Person p = (Person)o;    int num = this.name.compareTo(p.name);    returen num ==0?this.age-p.age:num;  }

  public Person(String name,int age){    this.name = name;    this.age = age;   }   public String getName(){    return String name;   }   public String setName(String name ){    this.name = name;   }   public String getAge(){    return String age;   }   public String setAge(String age ){    this.age = age;   }   public int hashCode(){    final ine X = 3;    return this.name.hashCode()+age*X;   }   public boolean equals(Object o){    if (this == obj)    return true;   if( obj instanceof Person){    Person p = (Person)obj;    return this.name.equals(p.name) && this.age == p.age ;   }   return false;   }   public String toString(){   return name +"..."+ age;  }

 }

5.Map集合   |将键映射到值

  |每个键只能映射一个值

  |keySet()开发中常用   import java.util.*;   public class MapDemo{    main{     Map<String,Integer> map = new HashMap<String,Integer>();     map.put("qq",123);     map.put("ww",456);     map.put("ee",789);   //用keySet()将,Map集合中的链存储到Set集合中     Set<String> set = map.keySet();   //用迭代器迭代set集合     Iterator<String> it = new Iterator();     while(it.hasNext()){      String key = it.next();      Interger value = map.get(key);      syso(key+vaiue);     }    }   }  | Map集合中的常用方法    | get(K) 根据键获取对应的值,如果没有这个键,返回null    | containsValue(V)判断集合中是否有这个值,有就返回true    | keySet() 将集合中的键存储到Set集合    |底层数据结构是哈希表结构

  |线程不安全,操作效率高     |案例,存储自定义对象并取出,需要实现2种方式  *****(见上)

7.输入任意字符串计算单个字符出现的次数  import java.util.*;  publib class MapTest{   public static void main(String[] args){    Scanner sc = new Scanner(System.in);    String str = sc.next();   //将字符串转成字符数组    char[] ch = str.ToCharArray();   //创建一个集合容器    TreeMap <Character,Integer> hm = new TreeMap<Character,Integer>();   //遍历数组    for(int x = 0;x<ch.length;x++){     Integer i = hm.get(ch[x]);//i有两种可能一种是null,一种是非null     if(i==null){//键集合中没有把字符串作为建存到map集合中      hm.put(ch[x],1);     }else if(i!=null){      i++;      hm.put(ch[x],i);    //迭代map集合    Set<Character>set = hm.keySet();    Iterator<Character>it = set.iterator();    while(it.hasNext()){

   Character c = it.next();    Integer i = hm.get(c);    syso();    }     }    }   }  }

 

黑马程序员JAVA篇--集合框架

上一篇:IIS 配置相应的文件下载


下一篇:uva - 193 Graph Coloring(回溯)