JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
来源:互联网 发布:省流量的软件 编辑:程序博客网 时间:2024/05/21 22:28
一Collection接口
Collection接口定义了存取一组对象的方法,其子接口Set、List和Queen分别定义了存储方式。
使用Collection接口需要注意:
1Collection接口是List、Set和Queen接口的父接口。
2定义了可用于操作List、Set和Queen接口的方法,也就是增删改查的方法。3Set接口中的数据对象没有顺序且不可以重复;List接口中的数据对象有顺序且可以重复。
二Collection接口中定义的方法
在Collection接口的介绍中我们知道Collection接口中定义了一些用于操作集合接口的有关增加、删除、查找、排
序和修改的方法。
查看Java API知道:
我们可以先来看看若是不使用集合框架创建一列对象的实例:
<span style="font-size:18px;">public class Test{public static void main(String[] args){ //每次只能创建一个对象,即使是数组也只能添加相同类型的对象Name name1 = new Name("f1","l1"); Name name2 = new Name("f2","l2"); Name name3 = new Name("f3","l3"); System.out.println(name1); System.out.println(name2); System.out.println(name3); }}class Name{private String firstName;private String lastName;public Name(String firstName,String lastName){this.firstName = firstName;this.lastName = lastName;}public String getFirstName(){return firstName;}public String getLastName(){return lastName;}public String toString(){return firstName + " " +lastName;}}</span>
运行结果:
我们使用Collection集合接口的实现类来创建对象以及使用add()方法来添加对象的实例:
<span style="font-size:18px;">import java.util.*;public class Test{public static void main(String[] args){Collection c = new ArrayList();//可以放入不同类型的对象c.add("hello");c.add(new Name("f1","l1"));c.add(new Integer(100));System.out.println(c.size());System.out.println(c);}}class Name{private String firstName;private String lastName;public Name(String firstName,String lastName){this.firstName = firstName;this.lastName = lastName;}public String getFirstName(){return firstName;}public String getLastName(){return lastName;}public String toString(){return firstName + " " +lastName;}}</span>
运行结果:
如果是使用remove()方法呢?
<span style="font-size:18px;">import java.util.*;public class Test{public static void main(String[] args){Collection c = new HashSet();//可以放入不同类型的对象c.add("hello");c.add(new Name("f1","l1"));c.add(new Integer(100));c.remove("hello");c.remove(new Integer(100));System.out.println(c.remove(new Name("f1","l1")));System.out.println(c);}}class Name{private String firstName;private String lastName;public Name(String firstName,String lastName){this.firstName = firstName;this.lastName = lastName;}public String getFirstName(){return firstName;}public String getLastName(){return lastName;}public String toString(){return firstName + " " +lastName;}}</span>
运行结果:
重写类的equals()方法必须重写hashCode()方法
集合类对象在调用remove()、contains()等方法时需要比较对象是否相等,这回涉及到对象类型的equals()方法和
hashCode()方法;对于自定义的类型,需要重写equals()方法和hashCode()方法以实现自定义的对象相对规则。
注意:
1相等的对象应该具有相等的hasd codes。
2增加Name类的equals()方法hashCode()方法如下:
<span style="font-size:18px;"> public boolean equals(Object obj){if(obj instanceof Name){Name name = (Name)obj;return (firstName.equals(name.firstName))&&(lastName.equals(name.lastName));}else{return super.equals(obj);}}public int hashCode(){return firstName.hashCode();}</span>再次改写上面实例的代码:
<span style="font-size:18px;">import java.util.*;public class Test{public static void main(String[] args){Collection c = new HashSet();//可以放入不同类型的对象c.add("hello");c.add(new Name("f1","l1"));c.add(new Integer(100));c.remove("hello");c.remove(new Integer(100));System.out.println(c.remove(new Name("f1","l1")));System.out.println(c);System.out.println("-----------------------");Collection lt = new LinkedList();lt.add(new Name("f1","l1"));lt.add(new Name("f2","l2"));System.out.println(lt.contains(new Name("f2","l2")));lt.remove(new Name("f1","l1"));System.out.println(lt);}}class Name{private String firstName;private String lastName;public Name(String firstName,String lastName){this.firstName = firstName;this.lastName = lastName;}public String getFirstName(){return firstName;}public String getLastName(){return lastName;}public String toString(){return firstName + " " +lastName;}public boolean equals(Object obj){if(obj instanceof Name){Name name = (Name)obj;return (firstName.equals(name.firstName))&&(lastName.equals(name.lastName));}else{return super.equals(obj);}}public int hashCode(){return firstName.hashCode();}}</span>
运行结果:
Collection集合接口定义的其它方法就不再一一用实例说明,在后面的模拟学生选课功能的实例时,我们可以再尝
试使用,以便深入了解。
三Collections工具类
Collection工具类是Java集合框架中用来操作集合对象的工具类,也是Java集合框架的成员。
(1)比较器——Comparable和Comparator接口
1)Comparable接口——可比较接口
Comparable实现该接口的提示:这个类的实例可以比较大小,可以进行自然排序,定义了默认的比较规则。
Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo()
方法被称为它的自然比较方法。
实现此接口的对象可以通过Collections.sort()和Arrays.sort()进行自动排序,也可以用作有序映射中的键或有序集合
中的元素,无需指定比较器。
compareTo()方法返回正数表示大,负数表示小,0表示相等。
comparable接口定义的方法:
接口声明:
<span style="font-size:18px;">public interface Comparable<T>{ int compareTo(T o);}</span>
2)Comparator接口——比较器接口
Comparator接口用于定义临时比较规则,而不是默认比较规则。可以将Comparator传递给sort()方法,从而允许
在排序顺序上实现精确控制。还可为那些没有自然顺序的对象collection提供排序。
Comparator接口比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或
正整数。
Comparator接口的方法:
接口声明:
<span style="font-size:18px;">public interface Comparator<T>{ int compare(T o1, T o2); }</span>
这里就不举例说明了,后面的一篇博文会专门把它们拿出来详细介绍。
(2)迭代器——Iterator接口
所有实现了Collection接口的容器类型都有一个iterator()方法用以返回一个实现了Iterator接口的对象。Iterator对象
称作迭代器,用以方便的实现对象容器内元素的遍历操作。
Iterator接口定义了如下的方法:
依然使用上面实例的代码:
<span style="font-size:18px;">import java.util.*;public class Test{public static void main(String[] args){Collection c = new HashSet();c.add(new Name("f1","l1"));c.add(new Name("f2","l2"));c.add(new Name("f3","l3"));Iterator i = c.iterator();while(i.hasNext()){//next()方法返回值为Object类型,需要转换为相应类型Name n = (Name)i.next();System.out.println(n.getFirstName()+"");}System.out.println("---------------");Collection hs = new HashSet();hs.add(new Name("fff1","lll1"));hs.add(new Name("f2","l2"));hs.add(new Name("fff3","lll3"));for(Iterator j=hs.iterator();j.hasNext();){Name name = (Name)j.next();if(name.getFirstName().length()<3){//如果换成c.remove(name)会产生例外 j.remove();}}System.out.println(hs);}}class Name{private String firstName;private String lastName;public Name(String firstName,String lastName){this.firstName = firstName;this.lastName = lastName;}public String getFirstName(){return firstName;}public String getLastName(){return lastName;}public String toString(){return firstName + " " +lastName;}public boolean equals(Object obj){if(obj instanceof Name){Name name = (Name)obj;return (firstName.equals(name.firstName))&&(lastName.equals(name.lastName));}else{return super.equals(obj);}}public int hashCode(){return firstName.hashCode();}}</span>
运行结果:
在这里只是介绍一下比较器和迭代器,在后面的系列文章中还会详细的说明和使用实例代码加以解释。
- JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
- JavaSE入门学习35:Java集合框架之List接口及其实现类ArrayList和LinkedList
- JavaSE入门学习36:Java集合框架之Set接口及其实现类HashSet和TreeSet
- JavaSE入门学习37:Java集合框架之Map接口及其实现类HashMap和TreeMap
- 对集合框架的一些概括总结之collection接口 子接口 子实现类
- Java集合框架 之Collection接口
- Java集合Collection接口之List子接口
- 集合框架之Collection接口
- java学习脚印:集合(Collection)之接口
- Java集合类之Collection接口
- Java集合之Collection接口
- Java集合之Collection接口
- 集合框架-Collection接口
- Collection接口,集合框架
- [学习笔记]Java集合框架以及Collection顶层接口
- java基础之集合框架--Collection及Map顶级接口
- Collection接口及其子接口,map接口及其子接口
- Java集合框架复习之Collection接口,iterator接口,iterable接口(二)
- C#中Split用法(把字符串以某个字符为分隔符分成一个数组)
- eclipse svn同步程序报错 Attempted to lock an already-locked dir(使用此方法已经解决问题)
- Codeforces Round #334 (Div. 2) D. Moodular Arithmetic
- SAP ABAP编程 获取物料长文本-其他长文本同理
- org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://mycluster/output alread
- JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
- Struts中ActionContext和ServletActionContext的比较 [转]
- c#调用c++制作的基于mfc的ocx控件
- enjoy_game服务端
- leetcode 055 Jump Game
- Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage
- UIView
- 【Stanford机器学习笔记】4-Regularization for Solving the Problem of Overfitting
- Java封装(修饰符+包+内部类)