当前位置:首页 > 集合类和接口
Collection库是在java.util包下的一些接口和类,只能用来存放对象,不像数组那样有容量大小的限制。 常见的问题:
是否要求内部元素同为一个类型的元素 是否线程安全的
是否允许元素重复
如何判断两个元素是否相同 hashcode() equals()
1. Collection接口
特性:其中的元素没有特定的顺序,元素也可以重复。
该接口的实现类是AbstractCollection类,其两个子类是AbstractList和AbstractSet。均为抽象类。 2. Set接口
特性:存放在里面的元素没有特定的顺序,但元素不可以重复(对数据对象而言其值相同则只存一份)。
HashSet类实现了Set接口。
子接口为SortedSet,实现该子接口的类为TreeSet类。 TreeSet中的数据不能重复,且数据类型需相同。 3. List接口
特性:数据具有特定的顺序,元素是可重复的。 实现该接口的类有LinkedList和ArrayList
4. Iterator接口
Collection对象都有一个iterator方法产生Iterator对象
而List中的数据是有序的,因而还有个特别的Iterator接口,即ListIterator,可以向前和向后遍历list。 5. Map接口
不是继承自Collection接口,需要存放关键值key和一个对应的数据value。
实现其接口的有HashMap类和TreeMap类,其中TreeMap类还实现了SortedMap接口。 6.JDK1.1中的Collection库只有List和 Map,前者对应的实现类是Vector,后者对应的实现类是Hashtable类。Vector还有个子类,Stack。 Iterator有对应的接口Enumeration接口。 新旧库的差别:
旧的类是Tread-Safe的,即Hashtable、Vector类中的方法是synchronized的,在多线程的程序中使用它们来存放数据可以确保数据的一致性,但在单线程的程序中使用则会降低效率。 新的库中的类执行效率会比较快,但用到Threads时就需要小心。但新的库也可以产生有synchronized的Collection对象,使用Collection类所提供的类方法“synchronizedXXXX”,来将XXXX接口转换成有synchronized保护的XXXX接口。
一、数组、集合
数组、集合:都是一种容器,用一个对象管理多个对象; 数组:不能自动增长;只能存放同类型的元素
集合:能自动扩容;部分集合允许存放不同类型的元素;
二、学习这些集合类要掌握哪些东西:
1)怎样得到(选择)集合对象; 2)怎样添加元素 3)怎样删除元素
4)怎样循环遍历没一个元素
三、list、set、map
collection:父接口;
Set:接口 ---一个实现类: HashSet
List:接口---三个实现类: LinkedList,Vector,ArrayList SortedSet:接口---实现类:TreeSet
1、List:
List:有序列表,允许存放重复的元素; 实现类:
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;下标也是从0开始; LinkedList:链表实现,增删快,查询慢 Vector:数组实现,线程安全,重量级
2.Set:
无序集合,不允许存放重复的元素;
实现类 HashSet:equals返回true,hashCode返回相同的整数;哈希表;
子接口SortedSet:对Set排序 实现类 :TreeSet:二叉树实现的; 看API:
java.util; hasNext(); next(); remove();
Iterable:可迭代的,访问的 ;
java.lang;实现了可迭代的接口就可以用迭代的方式访问; 只需实现 iterator();方法即可;Iterator iterator(); 三种循环的访问方式: for(int i=0;i 只有实现了Iterable接口的才能用第三种;能用第二种的也一定能用第三种; ArrayList:自动扩容,是数组照搬过来的; 3.Map HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放; HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问; 如果有两个Key重复,那么会覆盖之前的; Hashtable:线程安全的 Properties:java.util.Properties; key和value都是String类型,用来读配置文件; HashMap与Hashtable区别: HashMap线程不安全的,允许null作为key或value; Hashtable线程安全的,不允许null作为key或value; TreeMap: 对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器; HashSet:remove(Object o)的原则看这个对象O的Hashcode和equals是否相等,并不是看是不是一个对象; 定义一个Map; key是课程名称,value是Integer表示选课人数; map.put(cou,map.get(cou)+new Integer(1)); 四、Hashtable、Properties 1,Hashtable:实现了Map接口,此类实现一个哈希表,作用和HashMap相同。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 法。 2,Properties:继承自Hashtable,比 Hashtable 更严格 属性列表中每个键及其对应值都是一个字符串。 常用方法 String getProperty(String?key) 和 setProperty(String key,String value); 用法:我在C盘下建了一个名为 yy.dat 的文件,文件的内容为: name=hehe password=12345 执行以下程序,输出 hehe,可见用 Properties 可以很方便的解析配置文件 Properties p = new Properties(); for--each 循环: for(Object obj:list){ System.out.println(obj); }
共分享92篇相关文档