`
peihong-ph
  • 浏览: 21238 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

set、list与map

阅读更多
               1、Collection接口有两个子接口:  Set接口 和 List接口。
*
* 2、 Set接口的特性及其实现类 HashSet.
* 1) Set接口与Collection父接口完全一样,没有增加抽象方法。
* 2) Set接口相关的容器,其元素是无序的。
* 3) 元素是唯一,不重复。(采用屏蔽技术将重复的元素屏蔽在外)
* 4) Set接口的实现类为: HashSet.
*
* 注意: 凡是与Collection接口相关的容器在添加元素会反馈一
* 个boolean值,表明是否添加成功了。
*
* 3、HashSet实现类的特性:
* 1) 元素无序;
* 2) 元素不重复,添加重复元素时采用屏蔽技术屏蔽掉。
* 3) 判断元素相等依赖 equals()和hashCode()两个方法。
@Override
public boolean equals(Object obj) {
Dog d2 = (Dog)obj;

if( this.name.equals(d2.name)
&& this.sex == d2.sex
&& this.age == d2.age ){

return true;
}else{
return false;
}
}

@Override
public int hashCode() {
//return 9898;

return this.name.hashCode() + (this.sex+"").hashCode() + this.age;
}
*
* 注意: equals()和hashCode()均来源于 Object类。
*
* 注意: 在java语言中,规定:任何一个对象都有一个哈希编码,该编码是一个整数,由系统自动生成。
*
* 在java语言中,规定: 相等的对象拥有相同的哈希编码。 
*
* 结论: 当容器由HashSet类所构建的且存放自定义类的对象,则要求该 自定义类必须重写 equals()和hashCode()两个方法。
*
* 4、Set接口的子接口为:  SortedSet 及 其特性。
* 1) 元素会按大小自动排序;
* 2) 元素不重复,添加重复元素时采用屏蔽技术屏蔽掉。
*
* 5、SortedSet接口的实现类为: TreeSet及其特性:
* 1) 元素会按大小自动排序;
* 2) 元素不重复,添加重复元素时采用屏蔽技术屏蔽掉。
*
* 3) 判断元素相等依赖 equals(),但实质上依赖 compareTo()方法。

*
* 结论: 当容器由TreeSet构建的且用来存放自定义类的对象时,则要求该自定义类必须实现Comparable接口,重写compareTo()方法,为对象比较大小指定条件。
*
* 注意:在重写compareTo()方法时,尽量对对象的所有属性一一比较大小,从而实现比较相等与equals()方法同步。
class  Cat implements  Comparable {
@Override
public int compareTo(Object o) {
Cat c2 = (Cat)o;

int x = this.name.compareTo(c2.name);
int y = (this.sex+"").compareTo( String.valueOf(c2.sex) );
int z = this.age - c2.age;
if( x != 0 ){
return x;
}else if( z != 0 ){
return z;
}else{
return y;
}

                           1、Collection接口的另一个子接口:List其特性如下:
* 1) 元素在位置上是有序;
* 2) 元素可以重复;
* 3) 它除了拥有继承自父接口的抽象方法外,还新增了一些与位置操作相关的方法。
* 4) List接口的常用实现类:  ArrayList 和 LinkedList。
*
* 2、通过案例掌握List接口新增的与位置操作相关的方法:
* 插入、删除、获取、查找、替换等。
*
* 3、List接口的常用实现类ArrayList的特性?
* 1) ArrayList实现类采用队列的原理来管理元素。
* 在插入和删除元素时,效率较低;而查找元素效率较高。
*
* 2) 元素在位置上是有序;
* 3) 元素可以重复;
* 4) 它也拥有与位置操作相关的方法。
* 5) 它在判断元素相等时依赖 equals()方法。
*
* 4、List接口的常用实现类 LinkedList的特性
* 1) LinkedList实现类采用链表的原理来管理元素。
* 在插入和删除元素时,效率较高;而查找元素是效率较低。
*
* 2) 元素在位置上是有序;
* 3) 元素可以重复;
* 4) 它也拥有与位置操作相关的方法。
* 5) 它在判断元素相等时依赖 equals()方法。
*
* 5、与List接口相关的容器如何进行遍历?
* Iterator迭代器接口
* 新增的for循环
*
* ListIterator迭代器接口专门针对与List接口
* 相关的容器进行遍历(可正向也可逆向遍历)。
* 注意:  ListIterator接口专门针对与List接口相关的容器进行操作。
System.out.println("\n采用ListIterator迭代器接口实现容器的正向遍历:");

ListIterator lit = alist.listIterator();//1
while( lit.hasNext() ){//2
Object obj = lit.next();//3
System.out.println( obj );//4
}
System.out.println("\n采用ListIterator迭代器接口实现容器的逆向遍历:");

ListIterator lit2 = alist.listIterator( alist.size() );//1

while( lit2.hasPrevious() ){//2
Object obj = lit2.previous(); //3
System.out.println( obj );//4
}
6、与List接口相关的容器进行元素的排序等操作的特殊工具类: collections
* 1) 它来源于 java.util.Collections;
* 2) 它专家针对与List接口相等的容器进行操作。
* 3) 它提供了一些常用的方法:
*/
专门针对与List接口相关的容器进行操作的工具类:  Collections
Collections.shuffle(alist);//打乱元素的原有顺序,实现随机排列

Collections.reverse( alist );//将元素逆序过来(头变尾,尾变头)

Collections.sort( alist );//将元素升序排列。

int loc = Collections.binarySearch(alist, key); //先排序,后查找。 同时,在比较元素相等时依赖equals(),实质上依赖compareTo()方法。

Comparator   com   =   Collections.reverseOrder();
Collections.sort(list,   com);//sort和reverseOrder结合使用可以实现逆序

Comparator com=new HeightComparator();
Collections.sort(alist,com);//HeightComparator是实现了Comparator接口的一个自定义类,按身高来排序
验证与List接口相关的容器操作的工具类Collections在采用二分查找法查找元素时的特性。
验证List接口的常用方法:  indexOf(); 和binarySearch();
Indexof()与equals相关
BinarySearch()与compareTo相关
* 结论:  当与List接口相关的容器中存放的是自定义类的对象且要求进行排序,则该自定义类必须实现Comparable接口,重写compareTo()方法,为排序指定对象比较大小的条件。
*
* 注意: 在重写compareTo()方法时尽量做到对对象的所有属性一一比较大小。


* 1、Map接口的特性:
* 1) 它的元素由两部分(键和值)组成;其中键是唯一的,不重复。
* 2) 元素是无序的,即:没有按键排序。
* 3) 元素不重复,当添加重复的元素(主要判断键是否重复)时采用覆盖技术,
* 用新元素的值覆盖旧元素的值,而键不变。
* 4) 它为容器规定相关的操作方法:
* put(key , value); 添加元素。
*
* 5) 它有一个子接口SortedMap及常用实现类 HashMap.
*
* 2、通过案例掌握Map接口的常用抽象方法。
*
* 3、如何对Map接口相关的容器进行遍历
* keySet() 将所有元素的键收集起来构成一个Set接口的集合。
* Set  keys = m1.keySet();
Iterator  it = keys.iterator();//2

while( it.hasNext() ){//3

String key = (String)it.next();//4

Double value = (Double)m1.get(key);//5

System.out.println("水果名: " + key + "  价格: " + value + " RMB/500g");
}
entrySet()将所有元素的键/值收集起来构成一个Set接口的集合。
Set  elem=m1.entrySet();
Iterator  it = elem.iterator();//2
若写为泛型为:Set <Entry<String,Integer>>  elem=m1.entrySet();
Iterator<Entry<Character,Integer>> it1=tm.entrySet().iterator();
* 4、Map接口的常用实现类 HashMap及其特性
* 1) 元素无序(按键无序);
* 2) 元素不重复,添加重复元素时采用覆盖技术用新元素的值覆盖旧元素的值。
* 3) 判断元素相等主要是判断元素的键是否相等。
* 在判断相等时,依赖equals()和hashCode()两个方法。
*
* 5、Map接口的子接口为 SortedMap及其特性
* 1) 元素会按键的大小自动排序。即:元素是有序的。
* 2) 元素不重复,添加重复元素时采用覆盖技术用新元素的值覆盖旧元素的值。
*
* 3) 判断元素相等主要是判断元素的键是否相等。
* 在判断相等时,依赖compareTo()方法。
*
* 6、SortedMap接口的实现类为: TreeMap及其特性
* 同上。
* 验证TreeMap的特性
*
* 结论: 当容器由TreeMap实现类构建的且元素的键为自定义类的对象时,则要求
* 该类必须实现Comparable接口,重写compareTo()方法,为对象的键比较
* 大小指定条件。
*
* 注意:  在重写compareTo()方法时,尽量对对象的所有属性一一比较大小。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics