1、类集是一个动态的对象数组;
回顾:对象数组:
可以保存多个对象在一个数组之中;
最大问题:数组的长度不可以改变,创建数组是需考虑创数组的容量;
类集大小不确定,可以任意的扩充或减少;
类集都在java.util这个包中;
java类集接口框架:
Collection 元素的类集
List 元素的序列(Collection的子接口)
Set 没有重复元素的类集(Collection的子接口)
SortedSet 没有重复元素且排序的类集
Map 元素为二元偶对的汇集,不能重复
SortedMap 在Map基础上,加上排序的要求
Iterator 一个可遍历总个类集的对象
ListIterator 可遍历一个序列List的对象
以上所列出的全部都是接口;对于以上的接口主要的有三个
Collection: Collection 下存放的就是一个个的对象,每次存放单个对象
Map: 每次存放一对值:key--》value
Iterator: 输出接口,只要是集合都要去使用iterator输出
Collection接口:在一般的开发中为了清楚的表现处理数据的存放往往不直接使用;
子接口:List
子接口:Set
List既然是一个接口,则要使用必须依靠子类--》ArrayList
如果使用List,则格式为:List list=new ArrayList();
向对象数组中加入数据:
list.add(E e)---E 指的是元素
从对象数组中删除数:
list.remove(int index)
数据存放的数据就是加入时的顺序;
import java.util.*;
class Person{
private String name;
public Person(String name){
this.name=name;
}
}
public class Demo{
public static void main(String args[]) throws Exception{
//准备一个对象数组容器
List all=new ArrayList();
//向集合中加入数据
all.add("LID");
all.add("NAME");
all.add(new Person("YUJ"));
//向第二个元素处加入新内容
all.add(1,"LY");
System.out.println(all);
}
}
打印出对象数组中的值:
同for循环:
通过all.size()得到数组的长度;
通过all.get(int index)得到值;
使用Iterator输出:
以为集合的长度不固定,所以iterator采用的方法是一个一个判断输出;
如果有下一个元素,则执行,如果没有下一个元素就不执行了;
判断是否有下一个元素:public boolean hasNext();
输出元素:public Object next()
import java.util.*;
class Person{
private String name;
public Person(String name){
this.name=name;
}
public String toString(){
return "姓名:"+this.name;
}
}
public class Demo{
public static void main(String args[]) throws Exception{
//准备一个对象数组容器
List all=new ArrayList();
//向集合中加入数据
all.add(3);
all.add("LID");
all.add("NAME");
all.add(new Person("YUJ"));
//特定的遍历对象
Iterator ite=all.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
}
}
2、如何只能让一个集合中只加入一种对象:JDK1.5后添加的;
List<String> all=new ArrayList<String>();这样就只能addString类型的数据;
3、(Collection)集合操作的主要方法:
向集合中加入数据:public boolean add(Object obj)
从集合中删除数据:public boolean remove(Object obj),public boolean remove(int index)
为Iterator实例化:public Iterator iterator()
取出元素的个数:public int size();
4、set接口:
Set和List的区别:
(1).Set的基本使用与List一致,但是HashSet子类存放时是无序的(散列存放的);
(2).Set中的数据不允许重复元素,重复元素被替换掉;List中允许有重复元素;
注意:HashSet存放时是无序的,但是TreeSet存放时是有序的,按照字母顺序,
而不是添加数据时的顺序;
TreeSet靠的是Comparable接口排序的;
HashSet得排序和TreeSet的不一样 注意:
5、Iterator:可以获取元素,是从前到后的;ListIterator:允许双向遍历;
6、HashMap:
电话本:
张三---》123
李四---》456
HashMap是Map的子接口:map的主要功能是作为查找使用,而不是作为输出使用;
存数据的方法:
put(Object key,Object value);
取内容:根据key取
Object get(Object key);
Map 接口的对象 不能直接使用Iterator输出;
如果非要使用Iterator输出Map接口对象中的内容,必须使用一下的步骤:
Map-->Set-->Iterator-->Map.Entry-->key、values
//TreeMap 和map用Iterator输出(TreeMap存放是排序的,按照key值)
import java.util.*;
public class Demo{
public static void main(String args[]) throws Exception{
Map<String,String> m=new TreeMap<String,String>();
m.put("aa","123");
m.put("ff","456");
m.put("cc","789");
Set all =m.entrySet();
Iterator iter=all.iterator();
while(iter.hasNext()){
Map.Entry me=(Map.Entry)iter.next();
System.out.println(me.getKey()+"---->"+me.getValue());
}
}
}
以上是java2带来的新特性;
Enumeration:枚举,与Iterator的功能一致,都是用于输出集合中的内容;
Enumeration Iterator
判断是否有下一个内容 hasMoreElement() hasNext()
取值 nextElement next()
List和set都不能使用Enumeration输出,
而List的另外一个子类:Vector可以使用Enumeration输出;
import java.util.*;
public class Demo{
public static void main(String args[]) throws Exception{
Vector v=new Vector();
v.add("A");
v.add("B");
v.add("D");
v.add("E");
v.add("F");
Enumeration e=v.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
}
}
栈是一个先进后出的:
import java.util.*;
public class Demo{
public static void main(String args[]) throws Exception{
Stack s=new Stack();
s.push("A");
s.push("B");
s.push("C");
//取值
while(!s.empty()){
System.out.println(s.pop());
}
}
}
Hashtable与HashMap相似,但是Hashtable是同步的;
采用映射的方式:
key-----》value
Hashtable不支持迭代函数;
import java.util.*;
public class Demo{
public static void main(String args[]) throws Exception{
Map<String,String> m=new Hashtable<String,String>();
m.put("aa","123");
m.put("ff","456");
m.put("cc","789");
Set all =m.entrySet();
Iterator iter=all.iterator();
while(iter.hasNext()){
Map.Entry me=(Map.Entry)iter.next();
System.out.println(me.getKey()+"---->"+me.getValue());
}
Properties 类是Hashtable的子类;
属性类:
与Hashtable不同的是,Properties主要是保存字符串的
Hashtable是保存对象的;
getProperty(String key,String value)
getProperty(String key)
import java.util.*;
public class Demo{
public static void main(String args[]) throws Exception{
Properties p=new Properties();
p.setProperty("中国的首都","北京");
p.setProperty("日本的首都","东京");
p.setProperty("美国的首都","华盛顿");
//如果key值对没有对应的value,我们可以给个默认值
System.out.println(p.getProperty("日本的首都","不存在"));
}
}
分清一下几点:
保存单个值得集合:Collection
List:允许有重复元素
ArrayList:异步处理,新的类,只能用Iterator输出
Vector:同步处理,就得类,能用Iterator和Enumeration同时输出
Set:不允许有重复的元素,
HashSet:散列,无序
TreeSet:有序,按Comparable排序
保存一对值(Map)
HashMap:异步处理,新的类
Hashtable:同步处理,旧的类
TreeMap:按KEY进行排序的集合
输出:
Iterator:新的输出,方法名称较短
Enumeration:旧的输出类,方法名称较长