黑马程序员_Java集合-Collection<T>接口
2011-11-23 14:40
501 查看
----------------------
android培训、java培训、期待与您交流! ----------------------
所谓的集合就是指 一个长度可以变化的类似于(或等于)数组的东西。
Collection<T>接口有两个子接口:List<T>和Set<T>
1.List
List接口及其子类最大的特点就是允许元素重复。
· List接口中最常见的三个子类:
ArrayList<E> 此类最最常用。
Vector<E>
LinkedList<E>
ArrayList<E>
常用方法举例:
1.add()增加元素
import java.util.*;public class ArrayListDemo { public static void main(String[] args){ List<String> array = new ArrayList<String>(); array.add("Hello World"); // 在最后增加元素 array.add("世界,你好!"); array.add("Hello World"); array.add(0,"cxy"); //在指定位置增加元素 下标从0开始 System.out.println(array); // ArrayList类已经重写了toString方法 }
}
}
equals()方法的重写:
public class Person { private String name; private int age; public Person(String name, int age){ this.name = name; this.age =age; } public boolean equals(Object obj){ if(this == obj) return true; if(!(obj instanceof Person)) return false; Person temp = (Person) obj; if(this.name.equals(temp.name) && this.age == temp.age) return true; return false; }
}Vector<E>
} ArrayList其实代表一个数组 数据存储在一片连续的空间。 数据量小时使用此类。
LinkedList是代表链表 数据分散存储在内存中的各个角落。 数据量稍大时使用此类。
· set接口中最常见的两个子类: 1. HashSet< E > :无序排列 但是可以高速存取。 2. TreeSet< E > : 自动排序。 HashSet<E>如果想完整的使用HashSet<E>类 那么最少要重写equals()和hashCode()方法。 重写hashCode() 用于获得元素的存储位置。 重写equals() 用于在两个元素的位置相同的时候 比较两个元素是否相等。
范例:重写hashCode().
HashSet的一个特性:元素存储位置是由元素的hash码来确定的。它是无序存放的。 TreeSet< E >和HashSet相比,此类多了一个自动排序的功能。 但是 TreeSet的自动排序功能是有条件的: TreeSet<T> 中的 T 必须是实现了Comparable<T> 接口。 否则 程序运行时抛异常。范例:在Person类中实现Comparable<T>接口并重写方法。public int compareTo(Person arg0) { if(this.age>arg0.age) return 1; else if(this.age<arg0.age) return -1; else{ return this.name.compareTo(arg0.name); } } 如果compareTo()方法返回0 则意味着正在比较的2个对象相等。 而两个对象相等在Set中是不允许出现的。 因此 重写compareTo()方法时 要将对象的所有字段都进行比较。 要保证只有在两个对象的各个属性的值都相同的情况下才返回0。否则就返回1或-1。 集合的输出范例1:Iterator遍历集合import java.util.*;public class Demo{ public static void main(String[] args){ Collection<String> array = new ArrayList<String>(); array.add("No.45"); array.add("No.15"); array.add("No.23"); array.add("No.14"); array.add("No.65"); array.add("No.12"); Iterator<String> iter = array.iterator(); while(iter.hasNext()){ System.out.println(iter.next()); } }
} 范例2:使用foreach遍历集合import java.util.*;public class Demo{ public static void main(String[] args){ List<String> array = new ArrayList<String>(); array.add("No.45"); array.add("No.15"); array.add("No.65"); for(String str : array) System.out.println("☆"+str+"☆"); }
}
----------------------
android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
android培训、java培训、期待与您交流! ----------------------
所谓的集合就是指 一个长度可以变化的类似于(或等于)数组的东西。
Collection<T>接口有两个子接口:List<T>和Set<T>
1.List
List接口及其子类最大的特点就是允许元素重复。
· List接口中最常见的三个子类:
ArrayList<E> 此类最最常用。
Vector<E>
LinkedList<E>
ArrayList<E>
常用方法举例:
1.add()增加元素
import java.util.*;public class ArrayListDemo { public static void main(String[] args){ List<String> array = new ArrayList<String>(); array.add("Hello World"); // 在最后增加元素 array.add("世界,你好!"); array.add("Hello World"); array.add(0,"cxy"); //在指定位置增加元素 下标从0开始 System.out.println(array); // ArrayList类已经重写了toString方法 }
}
2.remove()删除元素import java.util.*;public class ArrayListDemo { public static void main(String[] args){ List<String> array = new ArrayList<String>(); array.add("Hello World"); array.add("世界,你好!"); array.add("Hello World"); array.remove(2); // 指定位置删除 下标从0开始 array.remove("世界,你好!"); //指定元素删除 array.clear(); //删除所有元素 System.out.println(array); }
}
· 使用remove()方法删除元素时 会拿指定的元素依次从集合第一个元素开始比较 如果比较的结果相同 可就删除该元素。 比较的时候会调用equals()方法· 因为在String类中重写了此方法 所以可以找到并成功删除。· 但是如果是用户自定义类的匿名对象在没有重写equals()方法的前提下 就无法删除这个匿名对象了。 |
public class Person { private String name; private int age; public Person(String name, int age){ this.name = name; this.age =age; } public boolean equals(Object obj){ if(this == obj) return true; if(!(obj instanceof Person)) return false; Person temp = (Person) obj; if(this.name.equals(temp.name) && this.age == temp.age) return true; return false; }
这样就可以把person的对象删除了。
3.get()得到指定下标的元素:import java.util.*;public class ArrayListDemo { public static void main(String[] args){ List<String> array = new ArrayList<String>(); array.add("Hello World"); array.add("世界,你好!"); array.add("Hello World"); for(int i=0; i<array.size(); i++) // size()得到当前集合中元素个数 System.out.print(array.get(i)+"、"); //获得指定位置上的元素 }}4.toArray()转成数组:import java.util.*;public class ArrayListDemo { public static void main(String[] args){ List<String> array = new ArrayList<String>(); array.add("Hello World"); array.add("世界,你好!"); array.add("Hello World");//转换成指定数据类型的数组 String[] str = array.toArray(new String[]{}); for(String s : str) System.out.print(s+" <--> "); }
}Vector<E>
Vector<E>的用法和ArrayList<E>用法一样,他们的区别在于Vector<E>是线程安全的。所谓的线程安全就是指所有的方法都是用synchronized修饰。使用此关键字修饰的方法同一时间只能被一个线程访问 其他线程必须等待 因此就造成程序执行时间较长的缺点。 正因为此 才说Vector类效率低 且是同步操作。 只有在一些对安全性要求高的场合下才考虑使用Vector类。 LinkedList<E> LinkedList<E> 类表示一个链表类。 它实现了Queue< E >接口。用法举例:import java.util.LinkedList;public class LinkedListDemo { public static void main(String[] args){ LinkedList<String> line = new LinkedList<String>(); line.add("No.1"); //在表尾增加元素 line.add(0,"No.2"); //在指定位置增加元素 line.push("No.5"); //在表头增加元素 line.addFirst("No.3"); //在表头增加元素 line.addLast("No.4"); //在表尾增加元素 System.out.println(line); System.out.println("只查看表头:"+line.getFirst()); System.out.println("查看并删除表头:"+line.pop()); System.out.println("只查看表头:"+line.peek()); System.out.println("只查看表尾:"+line.getLast()); System.out.println("查看并删除表尾:"+line.remove(line.size()-1)); String[] array = line.toArray(new String[]{}); for(String str : array) System.out.print(str+" "); }
} ArrayList其实代表一个数组 数据存储在一片连续的空间。 数据量小时使用此类。
LinkedList是代表链表 数据分散存储在内存中的各个角落。 数据量稍大时使用此类。
Set<E>接口
· set接口及其子类最大的特点就是不允许元素重复。
· set接口中最常见的两个子类: 1. HashSet< E > :无序排列 但是可以高速存取。 2. TreeSet< E > : 自动排序。 HashSet<E>如果想完整的使用HashSet<E>类 那么最少要重写equals()和hashCode()方法。 重写hashCode() 用于获得元素的存储位置。 重写equals() 用于在两个元素的位置相同的时候 比较两个元素是否相等。
范例:重写hashCode().
public int hashCode(){ return this.name.hashCode()*age-age/100; } |
内容胡乱写就可以,前提是两个不同对象的hashCode返回值不同就可以。
HashSet的一个特性:元素存储位置是由元素的hash码来确定的。它是无序存放的。 TreeSet< E >和HashSet相比,此类多了一个自动排序的功能。 但是 TreeSet的自动排序功能是有条件的: TreeSet<T> 中的 T 必须是实现了Comparable<T> 接口。 否则 程序运行时抛异常。范例:在Person类中实现Comparable<T>接口并重写方法。public int compareTo(Person arg0) { if(this.age>arg0.age) return 1; else if(this.age<arg0.age) return -1; else{ return this.name.compareTo(arg0.name); } } 如果compareTo()方法返回0 则意味着正在比较的2个对象相等。 而两个对象相等在Set中是不允许出现的。 因此 重写compareTo()方法时 要将对象的所有字段都进行比较。 要保证只有在两个对象的各个属性的值都相同的情况下才返回0。否则就返回1或-1。 集合的输出范例1:Iterator遍历集合import java.util.*;public class Demo{ public static void main(String[] args){ Collection<String> array = new ArrayList<String>(); array.add("No.45"); array.add("No.15"); array.add("No.23"); array.add("No.14"); array.add("No.65"); array.add("No.12"); Iterator<String> iter = array.iterator(); while(iter.hasNext()){ System.out.println(iter.next()); } }
} 范例2:使用foreach遍历集合import java.util.*;public class Demo{ public static void main(String[] args){ List<String> array = new ArrayList<String>(); array.add("No.45"); array.add("No.15"); array.add("No.65"); for(String str : array) System.out.println("☆"+str+"☆"); }
}
----------------------
android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员:Java基础总结----接口 Collection<E>&iterator
- 黑马程序员_Java集合-Map<K,V>接口
- Java框架集合:Collection<E>、Iterable<T>和Iterator<E>接口
- 黑马程序员 Java基础<三>---> 抽象类、与接口
- 黑马程序员——Java基础---集合<一>
- Java 集合深入理解(4):List<E> 接口
- 黑马程序员 Java基础<七>---> 集合框架
- Java 集合深入理解(4):List<E> 接口
- 黑马程序员--JAVA<API>--集合、泛型等
- Java 集合深入理解(4):List<E> 接口
- java.util.Collection<E>接口
- 黑马程序员 Java基础<三>抽象类与接口概念
- Java 集合深入理解(4):List<E> 接口
- 黑马程序员——Java基础---集合<二>Map,Arrays,Collections
- 黑马程序员 JAVA基础<四> 集合
- 黑马程序员--Java学习日记之集合(collection类与list接口)及泛型概述
- Java中集合(一)Collection 、List<E> 、ArrayList<E>
- 黑马程序员-JAVA基础-Java 集合之Collection 接口和遍历方法
- 黑马程序员 Java基础<八>---> 集合-工具类
- 黑马程序员_java集合<七>