标签:import price 定位 定义 自定义 click 接口继承 img util
首先看下继承结构:
ArrayList(常用):
1 /** 2 * List接口继承Collection接口 3 * ArrayList, Vector为List接口的实现类 4 * add()添加新元素,remove()删除指定位置元素,get()通过索引获取对应位置元素,set()设置索引位置元素 5 * Iterator(最常用)接口实现集合遍历 6 */ 7 List list = new ArrayList<String>(); 8 list.add("Hello aa"); 9 list.add("Hello bb"); 10 list.add("Hello cc"); 11 list.add("Hello dd"); 12 list.add("Hello dd"); 13 list.add("Hello dd"); 14 list.remove(0); 15 System.out.println(list); 16 System.out.println(list.get(0)); 17 list.set(0, "nihao"); 18 System.out.println(list.get(0)); 19 Iterator iter = list.iterator(); 20 while (iter.hasNext()) { 21 System.out.println(iter.next()); 22 }
Vector(旧版):
1 /** 2 * List接口继承Collection接口 3 * ArrayList, Vector为List接口的实现类 4 * add()添加新元素,remove()删除指定位置元素,get()通过索引获取对应位置元素,set()设置索引位置元素 5 * Iterator(最常用)接口实现集合遍历 6 */ 7 List list = new Vector<String>(); 8 list.add("Hello aa"); 9 list.add("Hello bb"); 10 list.add("Hello cc"); 11 list.add("Hello dd"); 12 list.add("Hello dd"); 13 list.add("Hello dd"); 14 list.remove(0); 15 System.out.println(list); 16 System.out.println(list.get(0)); 17 list.set(0, "nihao"); 18 System.out.println(list.get(0)); 19 Iterator iter = list.iterator(); 20 while (iter.hasNext()) { 21 System.out.println(iter.next()); 22 }
两者的主要区别:
ArrayList是JDK1.2新加入的, Vector在JDK1.0中就已经出现, Vector是同步的, 所以是线程安全的(当然性能会低),ArrayList是异步的,所以线程不安全,日常开发中Vector已经很少用了,ArrayList更常用一些,两者的用法基本一致。
HashSet, TreeSet:
1 /** 2 * Set(集合)是不重复的, Collection集合的子接口 3 */ 4 Set hashSet = new HashSet<String>(); 5 hashSet.add("1111"); 6 hashSet.add("1111"); 7 hashSet.add("2222"); 8 hashSet.add("3333"); 9 hashSet.add("X"); 10 hashSet.add("C"); 11 hashSet.add("E"); 12 hashSet.add("A"); 13 System.out.println(hashSet); // 发现HashSet是无序的 14 Set treeSet = new TreeSet<String>(); 15 treeSet.add("1111"); 16 treeSet.add("1111"); 17 treeSet.add("2222"); 18 treeSet.add("3333"); 19 treeSet.add("X"); 20 treeSet.add("C"); 21 treeSet.add("E"); 22 treeSet.add("A"); 23 System.out.println(treeSet); // 发现TreeSet是有序的
用HashSet, TreeSet存储自定义类Book:
Book类:
1 public class Book { 2 private String title; 3 private double price; 4 public Book(){ 5 this("", 0.0); 6 } 7 public Book(String title, double price){ 8 this.title = title; 9 this.price = price; 10 } 11 }
执行如下代码:
1 public class Ph { 2 public static void main(String[] args) { 3 Set treeSet = new TreeSet<String>(); 4 treeSet.add(new Book("Java开发", 29.8)); 5 treeSet.add(new Book("Java开发", 29.8)); 6 treeSet.add(new Book("JSP开发", 39.8)); 7 treeSet.add(new Book("Oracle开发", 79.8)); 8 System.out.println(treeSet); 9 } 10 }
运行时异常:
Exception in thread "main" java.lang.ClassCastException: MyPackageOne.Book cannot be cast to java.lang.Comparable
看到Comparable明白TreeSet通过Comparable接口实现让元素不重复和排序,所以运用TreeSet存储自定义类时应实现Comparable接口并实现CompareTo方法
故Book类此时应为:
1 public class Book implements Comparable<Book>{ 2 private String title; 3 private double price; 4 public Book(){ 5 this("", 0.0); 6 } 7 public Book(String title, double price){ 8 this.title = title; 9 this.price = price; 10 } 11 12 @Override 13 public int compareTo(Book o) { 14 if(price > o.price){ 15 return 1; 16 }else if(price < o.price){ 17 return -1; 18 }else{ 19 // 注意应该把所有元素的比较填入, 不然有一个属性相同可能就会误以为相同元素 20 return title.compareTo(o.title); 21 } 22 } 23 }
而此时换成HashSet,发现会有重复元素,因为HashSet通过HashCode()和equals()方法实现去重,故此时Book类应为:
1 import java.util.Objects; 2 3 public class Book { 4 private String title; 5 private double price; 6 7 public Book() { 8 this("", 0.0); 9 } 10 11 public Book(String title, double price) { 12 this.title = title; 13 this.price = price; 14 } 15 16 @Override 17 public boolean equals(Object o) { 18 if (this == o) return true; 19 if (o == null || getClass() != o.getClass()) return false; 20 Book book = (Book) o; 21 return Double.compare(book.price, price) == 0 && 22 Objects.equals(title, book.title); 23 } 24 25 @Override 26 public int hashCode() { 27 return Objects.hash(title, price); 28 } 29 30 @Override 31 public String toString() { 32 return title + price; 33 } 34 }
标签:import price 定位 定义 自定义 click 接口继承 img util
原文地址:https://www.cnblogs.com/sqdtss/p/9867718.html