java集合框架小结
java集合框架
主要有Set ,List,Map 这三个接口,它们都在java.util.*这个包下。
1.首先说说Collection,因为Set和List都是继承了Collection接口的子接口。
百度了一下,是这么说的:
java中定义了很多集合类(也叫聚集或者容器),Collection是所有集合类的父接口.Collection接口定义了15方法,没有任何常量定义,这里简要说明这些方法
1.size()
获得集合中元素的个数,如果个数大于Integer.MAX_VALUE,返回Integer.MAX_VALUE.
2.isEmpty()
如果不含任何元素,返回true
3.contains(Object o)
如果包含指定元素,返回true
4.iterator()
返回迭代器
5.toArray()
返回数组Object[]
6.toArray(Object[] a)
返回数组Object[],如果a可以包含集合中的元素,返回a,否则生成一个新的数组.
7.add(Object o)
添加一个元素,成功返回true
8.remove(Object o)
删除一个数据,成功返回true
9.addAll(Collection c)
添加包含在集合c中的所有元素,如果集合有改变,返回true
10.removeAll(Collection c)
删除包含在集合c里的所有元素,如果集合有改变,返回true
11.retainAll(Collection c)
删除不包含在集合c里的所有元素,如果集合有改变,返回true
12.containsAll(Collection c)
如果包含集合c里的所有元素,返回true
13.clear()
清除集合,调用后isEmpty应该为true
14.equals(Object c)
判断是否相等
15.hashCode()
返回哈希值
在Java类库中,没有直接继承Collection的类,都是继承Collection的子接口,比如List,Set,Map等,而且都不相交,
也就是不可以既是List又是Set.
2.Set接口
1.无序的,像往口袋里放东西,因此不能根据索引获得,如果要获取数据必须使用迭代器(iterator)。如:
Iterator<Student> iter = set.iterator();
//遍历
while(iter.hasNext()){
Student stu = iter.next();
//调用toString方法
System.out.println(stu.toString());
}
2.不能有重复的数据
但是如果是下面的情况:
//循环添加数据
for(int i=0;i<10;i++){
Student stu = new Student("学生" + (char) (i + 65), i);
set.add(stu);
}
Student stu = new Student("学生" + (char) 65, 0);
set.add(stu);
Student stu1 = new Student("学生" + (char) 65, 5);
set.add(stu1);
Student stu2 = new Student("学生" + (char) 66, 1);
set.add(stu2);
一开始老师问我们结果会是多少个数据时,我们都以为是11个,但结果出来是13个!仔细一想,原来我们都被迷惑了,
原因是,每new一个对象,它对应的地址都是不一样的,因此不是重复的!所以会得到13个数据。
3.List接口
1.有序的,既可以直接通过索引来获得数据
2.操作方式与自定义队列类似
3.是使用数组来实现的
4.Map<K,V>
1.类似映射,是一一对应的关系,好比学生对应一个学号
2.键值对方式存储数据。
3.只要键不同,那么值是可以相同的。(键不能重复,但值可以重复)
4.将有关联关系的对象放入map中用的是put(K key,V value)方法。
5.常实现的子类接口有java.util.HashMap;java.util.HashTable
5.自定义队列
自定义队列时线性的数据结构。基本思想很简单,就是先创一个零长度的数组,当要添加一个元素的时候就再创一个长度比原数组长度长一的数组,把要添加的元素加到这个新的数组的最末端,再把这个新的数组名赋值给原数组名,如此循环下去,就可以使得元素不断的加进去了
如:
public class ListDiy {private int[] old = new int[0];public void add(int n){int[] newone = new int[old.length+1];newone[old.length]=n;for(int i=0;i<old.length;i++){newone[i]=old[i];}old=newone;}