OCJP之Container

作为一个初学者,粗浅地总结一下对Container的理解。。。其中错误、不当之处,恳请纠正,先谢啦!

1 比较List, Map, Set

    1) List, Set, Queue都继承了接口Collection,可以使用Collections工具类...sort(), reverse(), binarySearch()这几个方法只适用于List<?> list,不适用于Set

                List的实现类有: Vector, LinkedList, ArrayList....

                Queue的实现类有: LinkedList, PrioritiesQueue...

        Map没有实现上述工具类的接口

                 Map的实现类有: HashMap, HashTable, TreeMap...

                                               HashMap键和值都允许为NULL

                                               HashTable键和值不允许为NULL

    2) List有序、值可以重复,有index; 所以,查询比较快,读写比较慢

        Set无序,值不能重复;所以查询比较慢,读写快;

        Map是以key-value pair的形式存储数据;

    3) PriorityQueue, Queue这些类都是有序排列的,FIFO(First in first out),可以理解成list-like

        Properties是key-value pair存储,可以理解成map-like


TreeMap: 排序是以key自然升序来排列(缺省情况,即没有继承Comparator接口,没有重写Compare()方法时);


TreeSet: 以自然升序来排列(缺省情况,即没有继承Comparator接口,没有重写Compare()方法时);


TreeMap/TreeSet实例:


package com.ocjp.collection;

 import java.util.*;
 public class Piles {
     public static void main(String[] args) {
     TreeMap<String, String> tm = new TreeMap<String, String>();
     TreeSet<String> ts = new TreeSet<String>();
     String[] k = {"1", "b", "4", "3"};
     String[] v = {"a", "d", "3", "b"};
     for(int i=0; i<4; i++) {
         tm.put(k[i], v[i]);
         ts.add(v[i]);
 }
     //TreeMap排序是以key自然升序来排列;
     System.out.print(tm.values() + " ");
     Iterator it2 = ts.iterator();
     //TreeSet以自然升序来排列;
     while(it2.hasNext()) System.out.print(it2.next() + "-");
 } }


TreeSet.subSet()方法:

package com.ocjp.collection;

 import java.util.*;
 public class Corner {
	 public static void main(String[] args) {
		 TreeSet<String> t1 = new TreeSet<String>();
		 TreeSet<String> t2 = new TreeSet<String>();
		 t1.add("b"); 
		 t1.add("7");
//		 t2的范围是[3,c);
//		 t2是t1的备份集合,修改t2同时也修改了t1;vice-versa;
		 t2 = (TreeSet)t1.subSet("5", "c");
		 try {
//			 t1增加了一个超出t2范围的值,t2自动将其忽略,不会抛异常;但t1已经接收了这个值;
			 t1.add("d");
			 t2.add("6");
//			 t2增加了一个超过范围的值,直接抛异常;
			 t2.add("3");
		 }
		 catch (Exception e) { 
			 System.out.print("ex "); 
		 }
		 System.out.println(t1 + " " + t2);
	 } 
 }

输出:

ex [6, 7, b, d] [6, 7, b]



PriorityQueue实例

 import java.util.*;
 class Priorities {
	 public static void main(String[] args) {
//		 PriorityQueue是类似于list的集合,但放入的元素,是按照自然序列排序的
//		  内部的元素必须实现了Comparator<I>的compareTo();本例中,String已经重写了此方法;
//		 PriorityQueue 可以有重复元素;
//		 add(), offer()是增加元素的方法;
//		 peek(), poll()是获得元素的方法,但前者不移除当前元素,后者移除;
//		 获取元素时,遵守FIFO原则(First in First out);
		 PriorityQueue toDo = new PriorityQueue();
		 toDo.add("dishes");
		 toDo.add("laundry");
		 toDo.add("bills");
		 toDo.offer("bills");
		 System.out.print(toDo.size() + " " + toDo.poll());
		 System.out.print(" " + toDo.peek() + " " + toDo.poll());
		 System.out.println(" " + toDo.poll() + " " + toDo.poll());
	 } 
}

Output:

4 bills bills bills dishes laundry


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值