java基础(五):集合

1.集合与数组的区别

(1).数组不可变长度,集合可变长度

(2).数组里可放基本数据类型和对象,集合只能放对象

 

2.集合框架顶层接口Collection的共性方法

增:add(Object obj);     addAll(Collection c);

删:clear();    remove(Object obj);    removeAll(Collection c);

判断是否为空:isEmpty();

判断长度:size();

判断是否包含:contains(Object obj);    containsAll(Collection c);

集合转数组:toArray();

A集合中去除和B集合有交集的部分:A.removeAll(B);

A集合中取得和B集合的交集部分:A.retainAll(B);

迭代器遍历集合:

        for(Iterator it = coll.iterator(); it.hasNext();){

                it.next();

        }

 

3.Collection下一层

List:有索引,有序

Set:不重复

 

4.List的特有方法

增:add(index,element);

删:remove(index);

改:set(index,element);

查:get(index);    indexOf(element);

遍历:

     for(int i = 0; i<list.size();i++){

          list.get(i);

     }

     注:list遍历一般不用迭代器,如果用的话,迭代器类型要用LinkedIterator,不然如果做增删会报错,因为没有同步。

 

5.List子类

Vector:数组,线程同步。查询、增删都慢(用得少)

ArrayList:数组,线程不同步。查询快、增删慢

LinkedList:链表,线程不同步。查询慢,增删快

 

ArrayList的实例:将ArrayList重复的部分去除

     方法一:

     for(int i = 0;i<list.size()-1;i++){

          Object obj1 = list.get(i);

          for(int j = i+1;j<list.size();j++){

               Object  obj2 = list.get(j);

               if(obj1 == obj2){

                    list.remove(j);

                    j--;

               }

          }

     }

     方法二:

     ArrayList temp = new ArrayList();

     for(int i = 0;i<list.size();i++){

          Object obj = list.get(i);

          if(!temp.contains(obj)){

               temp.add(obj);

          }

     }

 

LinkedList有几个特有的方法:

     addFirst(),    getFirst(),    removeFirst();    (Last同First)

     

6.Set子类

HashSet:哈希表结构,查询极快。

TreeSet:二叉树结构,线程不同步。可通过构造器对元素排序。

 

HashSet在做add时需要重写hashcode()和equal()方法。

TreeSet在做add时,如果返回值为0,不插入。写构造器的方法有两种:

     (1).实现Comparable接口,覆盖compareTo()方法

     (2).实现Comparator接口,覆盖compare()方法。

 

HashSet重写方法示例: 

     public int hashCode(){

          final int num = 31;

          return name.hashcode + age * num;

     }

     public boolean equals(Object obj){

          if(this == obj)    return true;

          if(!(obj instanceOf Student))    throw new ClassCastException("类型错误");

          Student stu = (Student)obj;

          return this.name.equals(stu.name) && this.age == stu.age;

     }

     class Student implements Comparable{

          public int compareTo(Object obj){

               Student stu = (Student)obj;

               int temp = this.age - stu.age;

               return temp == 0?this.name.compareTo(stu.name) : temp;

          }

     }

     class compareStringByLength implements Comparator{

          public int compare(String str1,String str2){

               int temp = str1.length - str2.length;

               return temp == 0?str1.compareTo(str2) : temp;

          }

     }

 

7.Map:双列集合,键值对,键不可以相同。

共性功能:

     增:put(key,value);    putAll(Map map);    (注:put()方法返回的是key的旧值)

     删:clear();    remove(key);

     判断长度:size();

     判断是非为空:isEmpty();

     判断是否包含:containsKey();    containsValue();

     查:get(key);

     遍历(两种方法):keySet,entrySet

          keySet:

               Map<String,String> map = new Map<String,String>();

               map.put("a","aaa");

               map.put("b","bbb");

               Set<String> keys = map.keySet();

               for(Iterator<String> it = keys.iterator(); it.hasNext();){

                    String key = it.next();

                    String value = map.get(key);

               }

           entrySet:

               Map<String,String> map = new Map<String,String>();

               map.put("a","aaa");

               map.put("b","bbb");

               Set<Map.Entry<String,String>> entry = map.entrySet();

               for(Iterator<Map.Entry<String,String>> it = entry.iterator(); it.hasNext();){

                    Map.Entry<String,String> me = it.next();

                    String key = me.getKey();

                    String value = me.getValue();

               }

 

8.Map子类

HashTable:哈希表,线程同步,不允许null键

HashMap:哈希表,线程不同步,允许null键

LinkedHashMap:在HashMap的基础上加了排序

TreeMap:二叉树,不同步,可对key排序

 

实例:一个字符串(str)统计每个字符出现的次数

     TreeMap<String,Integer> map = new TreeMap<String,Integer>();

     Char[] chars = str.toCharArray();.

     for(int i = 0;i<chars.length;i++){

          Integer vaue = map.get(chars[i]);

          int count = 0;

          if(value != null)    count = value;

          count++;

          map.put(chars[i],count);

     }

     StringBuffer sb = new StringBuffer();

     Set<String> keys = map.keySet();

     for(Iterator<String> it = keys.iterator();it.hasNext();){

          String key = it.next();

          Integer value = map.get(key);

          sb.append(key+"..."+value+"\n");

     }

 

9.集合框架总结

数组:查询快,增删慢。(Array)

链表:查询慢,增删快。(Linked)

List:有序

Set:不能重复

 

排序:Collections.sort(list,new compareStringByLength());    //自己定义的过滤器,参考上面

逆序:Collections.sort(list,Collection.reverseOrder(new compareStringByLength()));

最大(小)值:Collections.max(list,new compareStringByLength());

二分查找:Collections.binarySearch(list,key);

非同步变成同步:Collections.synchronizedCollection(coll);

集合变数组:list.toArray(new String[list.size()]);

数组变集合:Arrays.toList(array);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值