黑马程序员_王康Java常用集合类

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

Iterator 与 Enumeration
  1,枚举()Enumeration接口
  枚举(Enumeration)接口定义了可以对一个对象的类集中的元素进行枚举的方法.
  Enumeration指定下面的两个方法
  boolean hasMoreElements();
  Object nextElement();
  执行后,当仍有更多的元素可提取时,hasMoreElements()方法一定返回true.当所有元素都被枚举了,则返回false.
  nextElement()方法获得枚举中的下一个对象.
  以Vector为例.
  Enumeration e = v.elements();
  while(e.hasMoreElements()){
	System.out.println(e.nextElement());
  }
  2,迭代器(Iterator)接口
  和Enumeration差不多,不过名称比较短,通常推荐用Iterator对Collection集合进行迭代.迭代器代替了Java集合
  框架(Java Collections Framework)中的Enumeration.
  Collection接口中定义了iterator()方法,用于返回Collection的元素上进行迭代的迭代器.
  迭代器提供了三个方法供Collection类的实例使用:
  boolean hasNext();	//如果仍有元素可迭代,则返回true
  E.next();	//返回迭代的下一个元素
  void remove();	//从迭代器指向的Collection中移除迭代器返回的最后一个元素
  如果要输出Vector对象vect的迭代器,如下:
  Iterator it = vect.iterator();	//得到迭代器对象
  while(it.hasNext()){	//迭代循环
		Object obj = it.next();	//取得对象
  }


  Collections 与 Collection
  1,Collection
  Collection类的实例表示了一组对象,这些对象也成为Collection的元素.一些Collection允许有重复的元素,而另一些则不允许.一
  些Collection是有序的,而另一些则是无序的.
  该接口为其实现类提供了统一的操作接口方法.
  .新增一个或多个元素:
  boolean add(E e);	//确保Collection包含指定的元素
  bolean addAll(Collection<? extends E> c);	//将指定Collection中的所有元素添加到此Collection中
  .删除一个或多个元素
  boolean remove(Object o)
  boolean removeAll(Collection<?> c);
  void clear();
  boolean isEmpty();
  int size();
  .判断是否包含一个或多个元素:
  boolean contains(Object o)
  boolean containsAll(Collection<?> c);
  .产生元素集合的数组对象:
  Iterator<E> iterator();
  Object[] toArray();
  <T> T[];
  toArray(T[] a);
  2,Collections
  Collections完全由在Collection上进行操作或返回Collection的静态方法组成.它包含在Collection上操作的多态算法,即"包装器"
  他返回由指定Collectioni支持的新Collection,以及少数其他内容.
  该类提供了以系列功能的静态操作函数.
  .新增
  boolean addAll(Collection<? super T>c, T...elements);
  .填充
  void fill(List<? super T> list, T obj);
  .复制
  void copy(List<? super T> des,List<? extends T> src);
  .替换
  boolean replaceAll(List<T> list,T oldVal,T newVal);
  .排序
  void sor(List<T> list);
  void sort(List<T>,Comparator<? super T> c);
  .搜索
  int binarySearch(List<? extends Comparable<? super T>> list, T key);
  int binarySearch(List<? extends T> list, T key,Comparator<? super T>c);


  Arrays 与 数组
  Java中的一个类Arrays,专门用来操作数组.他拥有一组静态函数,包含用来操作数组(比如排序和搜索)的各种方法.
  这些函数操作的数组都是Java基本数据类型的数组,具体的函数用法有很多;
  .填入--fill();将值填入Array中
  static void fill(int[] int val);
  static void fill(int[]a int fromIndex,int toIndex, int val);

  .复制--copyOf();复制指定的数组到指定的数组中
  static int[] copyOf(int[] original,iint newLength);
  static int[] copyOfRange(int[] original, int from, int to);

  .比较--equals();比较两个数组是否相等.数组拥有相同元素个数,且所有对应元素两两相等.
  static boolean equals(int[] a, int[] a2);

  .搜索--binarySearch();在排好序的数组中寻找元素
  static int binarySearch(int[] a ,int key);

  .排序--sort();用来对Array进行排序
  static void sort(int[] a);
  static void sort(int[] a,int formIndex, int toIndex);


  列表类List
  List接口对Collection进行了简单的扩充,他的具体实现类常用的有ArrayList和LinkList.我们可以将任何对象放到一个List容器中,
  并在需要时从中取出.
  .ArrayList是一种leisii数组的形式进行存储,因此他的随机访问速度极快.
  .LinkList的内部实现是链表,他适合与在链表中间需要频繁进行插入和删除操作.

  链表LinkList
  LinkList是List接口的链表列表实现.并且允许所有元素(包括null).除了实现List接口外,LinkList类还为在列表的开头及结尾get(),remove(),add()元素提供了统一的命名方法.常用的有:
  void addFirst(E e);
  void addLast(E e);

  E getFirst();
  E getLast();

  E removeFirst();
  E removeLast();

  可变数组ArrayList
  ArrayList是List接口的大小可变数组的实现.实现了所有可选列表操作,并允许包括null在内的所有元素.除了实现List接口外,此类还提供了一些方法来操作内部用来存储列表的数组的大小.

  哈希集合HashSet
  HashSet由哈希表(实际上是一个HashMap的实例)支持,为基本操作提供了稳定性能,这些基本操作包括add(),remove(),contains(),
  size().
  为了在该类的实例中保存数据,数据对象必须有用hashCode函数.
  如下:
  class Person{
	int num;
	String name;

	Person(int num, String name){
		this.num = num;
		this.name = name;
	}

	public String toString(){
		return "num=" + num + "" + "name=" + name;
	}
	
	public int hashcode(){
		return num*name.hashCode();
	}

	public boolean equals(Student s){
		return num==s.num&&name.equals(s.name);
	}
 }
 同时也可以实现equals()函数,以及toString()函数用于输出.然后就可以添加该类的实例到HashSet中:
 HashSet hs = new HashSet();
 hs.add(new Student(1,"zhangsan"));
 hs.add(new Student(2,"lisi"));
 hs.add(new Student(3,"wangwu"));
 hs.add(new Student(1,"zhangsan");	
 Iterator it = hs.iterator();
 while(it.hasNext()){
	System.out.println(it.next());
 }

 输出结果:
 num=1 name=zhangsan
 num=2 name=lisi
 num=3 name=wangwu
 num=1 name=zhangsan

 可见,HashSet是一类特殊的List,他添加的元素必须实现hashCode()函数.


 哈希映射HashMap
 该类是基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是
 不保证该顺序恒久不变.
 该类提供了三个构造函数
 HashMap();
 HashMap(int initaialCapacity);
 HashMpa(int initialCapacity,float loadFactor);
 与HashSet相似,自己写的类要能够添加到HashMap中,也需要实现hashCode()函数.如下:
 HashMap hmap = new HashMap();
 hmap.put("A",new Student(1,"zhangsan"));
 hmap.put("B",new Student(2,"lisi"));
 hmap.put("C",new Student(3,"wangwu"));
 hmap.put("D",new Student(1,"zhangsan"));
 Iterator it = hmap.keySet().iterator();//取得键迭代器
 while(it.hasNext()){//循环键
	String key = (String)it.next();	//取得键
	String value = (Person)hmap.get(key);//取得键值
	System.out.println(key+"="+value);	
 }
 Sysetm.out.Println(hmap);
 结果:
 num=1 name=zhangsan
 num=2 name=sisi
 num=3 name=wangwu
 num=1 name=zhangsan
 所以,HashMap是一类特殊的Map,他添加的元素必须实现hashCode()函数.


 哈希表HashTable
 此类实现了一个哈希表,该哈希表将键映射到相应的值.任何非null对象都可以用做键或值.为了成功地在哈希表中存储和获取对象
 用做键的对象必须实现hashCode方法和equals方法.
 如果很多条目要存储在Hashtable中,那么与根据需要执行自动rehashing操作来增大表的容量的做法相比,使用足够大的初始容量创建
 哈希表或许可以更有效地插入条目.
 如下:
 Hashtable<String, Integer> numbers = new Hashtable<String, Integer>();
 numbers.put("one",1);
 numbers.put("two",2);
 numbers.put("three",3);
 要获取一个数字,可以使用如下代码:
 Integer n = numbers.get("two");
 if(n!=null){
	System.out.println("two = " + n);
 }
另外:Hashtable是同步的.
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值