Java核心---集合类

来源:互联网 发布:淘宝上匡威正品店 编辑:程序博客网 时间:2024/06/05 04:11

集合类
                                                            
   java.util包中提供了一些集合类,与数组类似,集合也被称为容器。它们的不同点是数组的长度是固定的,集合的长度是可变的,数组用来存放基本类型的数据,集合用来存放对象的引用。常用的集合有List,Map,Set,继承关系图如上。
                                     1.Collection接口
   Collection接口是层次结构中的根接口。Collection接口通常不能直接使用,不过它提供了增删改查数据的方法。由于List和Set接口都竭诚了Collection接口,所以它们也可以使用父类的方法。
常用的方法有:
   add(E e)  添加对象
   remove(Object o) 移除对象
   isEmpty() 返回Boolean值,判断集合是否为空
   iterator() 返回在此Collection的元素上进行迭代的迭代器,用于遍历
   size() 返回值的类型是int,获取集合中元素的个数
示例:
import java.util.*; class CollectionDemo{public static void main(String[] args) {Collection<String> list = new ArrayList<String>(); //实例化集合类对象list.add("a");                            //添加集合元素list.add("b");list.add("c");Iterator<String>it = list.iterator();    //创建迭代器while(it.hasNext())//判断下一个元素是否为空{String str = (String)it.next();   //获取集合中的元素System.out.println(str);}}}
结果为 
a
b
c

                                        2.List集合
  List集合包括List接口以及List接口的所有实现类。List集合中的元素是有序的,允许重复,因为该集合体系有索引。
 因为List接口继承了Collection,所以父类有的它都有了。除此之外,还有几个非常重要的方法:
1 get(int index): 获得指定索引位置的元素
2 set(int index,Object obj): 将集合中指定索引位置的对象修改为指定的对象

List接口的实现类: 常用的有ArrayList和LinkedList
  ArrayList类实现了可变的数组,它底层的数据结构也是数组。可以通过索引位置对集合进行快速的随机访问,缺点就是插入对象和删除对象的速度较慢。
  LinkedList类采用的是链表结构,优点是插入和删除对象的速度快,但是随机访问集合元素的效率低,与ArrayList刚好相反。

示例:
import java.util.*;class  ListDemo{public static void main(String[] args) {List<String>list = new ArrayList<String>(); //创建集合对象list.add("a");list.add("b");list.add("c");list.add("d");int i = (int)(Math.random()*(list.size()-1));  //获取0-3之间的随机数System.out.println("随机获取数组中的元素:"+list.get(i));list.remove(2);                             //将指定索引位置的元素从集合中移除System.out.println("将索引是‘2’的元素从数组移动后,数组中的元素是:");for(int j=0;j<list.size();j++){   //循环遍历集合System.out.println(list.get(j));}}}

                                                                                          3.Set集合 
  Set集合中的对象不按特定的方式排序,只是简单的存储。不过Set集合中不能包含重复的对象。和List同理,Set接口继承了Collection接口的所有方法。
 Set接口常用的实现类有HashSet类与TreeSet类:
HashSet类实现Set接口,是由哈希表支持。它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null。
TreeSet类实现了Set接口,也实现了java.util.SortedSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序。
TreeSet类增加的方法:
first() 返回Set中当前第一个元素
last() 返回Set中当前最后一个元素
comparator() 返回Set中进行排序的比较器,如果用的是自然顺序,就返回null
headSet(E toElement) 返回一个新的Set集合,新集合包含toElenment之前的所有对象
subSet(E fromElement,E fromElement) 返回一个新的Set集合,包含fromElement对象与fromElement对象之间的所有对象
注意: 返回的新的集合之类的,都是包含头,不包含尾的
对字符串进行长度的排序
import java.util.Comparator;import java.util.Iterator;import java.util.TreeSet;public class TreeSetTest{       public static void main(String[] args){            TreeSet ts = new TreeSet(new ComparatorByLen());   //调用新的比较方法            ts.add( "aaaa");         //向集合中添加元素            ts.add( "zz");            ts.add( "nbag");            ts.add( "cba");            ts.add( "abc");            Iterator it = ts.iterator();     //迭代器创建             while(it.hasNext()){            //循环判断下一个元素是否为空                  System.out.println(it.next());            }      }}class ComparatorByLen implements Comparator{       public int compare(Object o1,Object o2){            String s1 = (String)o1;            String s2 = (String)o2;             int temp = s1.length() - s2.length();             return temp == 0?s1.compareTo(s2):temp;  //用三目运算符返回长的字符串      }}
运行结果为:


                                       4.Map集合
  Map集合没有继承Collection接口,它提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。
 
Map接口提供了将key映射到值的对象。除了常用的集合方法之外,还有另外的一些方法:
put(K key,V value)  向集合中添加指定的key和value的映射关系
containsKey(Object key)   如果此映射包含指定key的映射关系,则返回true
containValue(Obejet value)   如果此映射将一个或多个key映射到指定值,则返回true
get(Object key)   如果存在指定的key对象,则返回该对象对应的值,否则返回null
keySet()   返回该集合中的所有key对象形成的Set集合
values()   返回该集合中所有值对象形成的Collection集合
示例:
import java.util.*;class MapDemo11{public static void main(String[] args) {Map<String,String>map = new HashMap<String,String>(); //创建Map实例map.put("01","李同学");                   //向集合中添加对象map.put("02","张同学");map.put("03","王同学");map.put("04","赵同学");Set<String> set = map.keySet();            //构建Map集合中所有key对象的集合Iterator <String> it = set.iterator();     //创建集合迭代器System.out.println("key集合中的元素:");while(it.hasNext())                    //遍历集合{System.out.println(it.next());}Collection<String>coll = map.values();   //构建Map集合中所有values值集合it = coll.iterator();System.out.println("values集合中的元素:");while(it.hasNext())   //遍历集合{System.out.println(it.next());}}}

输出结果:



0 0
原创粉丝点击