集合框架的使用

来源:互联网 发布:生物多样性 知乎 编辑:程序博客网 时间:2024/05/17 02:44
1.普通数组
1.定义数组
String str[]=new String[3];

2.缺点
1.定长     2.固定类型


2.Collection
老祖先Collection是一个接口
其父接口为Iterator          子接口有 List     ,     Set(List有索引,Set无索引)
Collection有许多方法,但都只是抽象方法,没有进行实现,没法用,实现的工作交给实现类去做。
 booleanadd(E e)
          确保此 collection 包含指定的元素(可选操作)。 booleanaddAll(Collection<? extendsE> c)
          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 voidclear()
          移除此 collection 中的所有元素(可选操作)。 booleancontains(Object o)
          如果此 collection 包含指定的元素,则返回 true booleancontainsAll(Collection<?> c)
          如果此 collection 包含指定 collection 中的所有元素,则返回 true booleanequals(Object o)
          比较此 collection 与指定对象是否相等。 inthashCode()
          返回此 collection 的哈希码值。 booleanisEmpty()
          如果此 collection 不包含元素,则返回 true Iterator<E>iterator()
          返回在此 collection 的元素上进行迭代的迭代器。 booleanremove(Object o)
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 booleanremoveAll(Collection<?> c)
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 booleanretainAll(Collection<?> c)
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 intsize()
          返回此 collection 中的元素数。 Object[]toArray()
          返回包含此 collection 中所有元素的数组。<T> T[]toArray(T[] a)
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

3.Collection的1子接口List
List继承了Collection,除了从父类继承一些抽象方法,自己也添加了特有的抽象方法。其新方法特点就是:索引
booleanadd(E e)
          向列表的尾部添加指定的元素(可选操作)。
 Eget(int index)
          返回列表中指定位置的元素。
 intindexOf(Object o)
          返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
intlastIndexOf(Object o)
          返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
ListIterator<E>listIterator()
          返回此列表元素的列表迭代器(按适当顺序)。
ListIterator<E>listIterator(int index)
          返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
 Eremove(int index)
          移除列表中指定位置的元素(可选操作)。
 Eset(int index,E element)
          用指定元素替换列表中指定位置的元素(可选操作)。
 List<E>subList(int fromIndex, int toIndex)
          返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。

4.List的1实现类ArrayList
ArrayList的特点就是动态数组,也就是数组的长度可变。
1.使用数组
创建动态数组
ArrayList<String> al=new ArrayList<String>();

添加数组元素
al.add("上海");     //按顺序添加
al.add(0,"汕头");    //向列表指定位置添加元素

修改元素
al.set(0,"潮汕");     //这里就将0位置的元素进行修改

遍历数组
Iterator<String> it= al.iterator();   //遍历每一个元素
while(it.hasNext()){               //当存在元素的时候进行打印
     syso(it.next);          //也可以用al.get(i)     来获取打印元素
}

删除元素
al.remove(1);          //删除第二个元素

5.List的2实现类LinkedList
LinkedList和ArrayList的区别就是:
ArrayList基于数据结构,适合查询和修改(较多考虑)
LinKedList基于链表结构,适合增加和删除

6.Collection的2子接口Set
集合存储的是对象的引用(地址信息),对象存在堆(heap)里面
List和Set的区别就是索引与重复:
List有索引,可以重复
Set没有索引,不能重复
Set继承了Collection接口的方法,但是并没有提供新方法,它只提供了自身特性:唯一性

7.Set的1实现类HashSet
HashSet的使用跟ArrayList一样,区别就在于:
1.存储时没有索引     2.打印出来的东西没有顺序     3.存储同样的信息会覆盖
通过哈希表存储

8.Set的1实现类TreeSet
TreeSet跟HashSet的区别就在于,HashSet是无序的,而TreeSet是有序的。但是其排序仅对英文有效,对中文无效
但是当存储的东西是一个对象的时候,
通过二叉树存储
1.使用数组
添加对象元素
ts.add(new Person("Jack",20));

遍历数组
Iterator<Person> it=ts.iterator();   //遍历每一个元素
while(it.hasNext()){       //因为TreeSet需要遵循一定的顺序,所以定义顺序规则
     Person p=it.next();
     p.print();    //只要实现Comparable<Person>接口才能正常打印
}

定义TreeSet的排序规则:
方法一:在声明类的时候,实现Comparable<Person>接口,然后编辑接口的方法
接口的方法编写方式:
if(this.age>o.age){     //o是传值
     return 1;     //1的意思就是大于
}else if(this.age<o.age){
     return -1;
}
return 0;     //否则返回0
方法二:也可以新建一个类,实现其接口(简约版):
直接return.name.compareTo(o2.name);
传比较器对象:TreeSet<Dog> ts=new TreeSet<Dog>(new MyCom());

9.Map
老祖先Map也是一个接口,但是两大支派区别就在于Map是双列集合(key-value)
Map的实现类主要有两个:1.HashMap     2.TreeMap

10.Map的1实现类HashMap
HashMap的跟HashSet的区别就是,Map系列是双列集合。
Map还有一个规定:键不能重复,value可以重复

1.使用数组
创建数组
HashMap<String,String> cities=new HashMap<String,String>();

添加数据
cities.put("010","汕头");

获取所有键的集合
Set<String> codes=cities.keySet();     //获得键的集合是Set类型
Set可以用Iterator()循环遍历

获取所有值的集合
Collection<String> cityNames=cities.values();    //获得值的集合,类型是Collection

通过键获取值
String cityName=cities.get(codes.iterator().next());    //将键传进去,获取相应的值

获取一条项目:键+值
Set<Entry<String,String>> entries=cities.entrySet();
用Iterator遍历打印
Iterator<Entry<String,String>> it=entries.iterator();
while(it.hasNext()){
     Entry<String,String>entry=it.next;
     syso(entry.getKey()+":"+entry.getValue());
}

11.Map的2实现类TreeMap
跟HashMap的区别就是键是有序的。

这里我们用一段公式做一个简单的总结,是属于非常不严谨有误区的公式,仅作为帮助记忆所用

存储+查询=ArrayList
存储+增删=LinkList
ArrayList+唯一=HashSet
HashSet+排序=TreeSet

HashSet+值=HashMap
HashMap+排序=TreeMap
0 0
原创粉丝点击