有哪些常用的集合?

ArrayList

TreeSet 以有序状态保存并可防止数据重复

HashMap 以键值对的形式保存数据

LinkedList 针对经常插入或删除中间元素所设计的高效率集合

HashSet 防止重复的集合,可快速地寻找相符的元素

LinkedHashMap

什么是泛型?为什么使用泛型?

在Java中,看到 <> 这一组尖括号,就代表泛型,这是从Java5.0开始加入的特性。

几乎所有你会以泛型写的程序都与处理集合有关。虽然泛型还可以用到其它地方,但它主要的目的还是让你能够写出有类型安全性的集合。也就是说,让编译器能够帮忙防止你把 Dog加入到一群 Cat中。

关于泛型,最重要的 3 件事

如何创建被泛型化类的实例?

如何声明指定泛型类型的变量?多态遇到泛型类型会怎样?

如何声明或调用泛型类型的方法?

// 创建被泛型化的类
List<Song> songList = new ArrayList<Song>();
// 声明泛型类型的方法
public void foo(List<Song> list) {}
// 调用泛型类型的方法
x.foo(songList);

集合有哪 3 类主要的接口?

List,是一种知道索引位置的集合,这是对待顺序的好帮手。

Set,不允许重复的集合,它注重独一无二的性质。

Map,使用键值对存储数据的集合,用 key 来搜索。

对象要怎样才算相等? Set集合是如何检查元素是否重复的?

如果 foo 和 bar 两对象相等,则 foo.equals(bar) 会返回 true ,且二者的 hashCode() 也会返回相同的值。要让 Set 能把对象视为重复的,就必须让它们符合上面的对象相等条件。

  1. 引用相等性:堆上同一对象的两个引用。 foo == bar; // true
  2. 对象相等性:堆上两个不同的对象在意义上是相同的。 foo.equals(bar) && foo.hashCode() == bar.hashCode(); // true

特点注意: == / equals() / hashCode() 三者之间的异同。

TreeSet的元素必须是 Comparable 的

TreeSet无法猜到程序员的想法,你必须指出TreeSet中的元素该如何排序。方案有二,其一是集合的元素都必须是实现了 Comparable 的类型;其二使用重载,取用 Comparator 参数的构造函数来创建 TreeSet。代码示例如下:

// 实现了 Comparable 接口的类,可用于TreeSet的元素
class Book implements Comparable {
String title;
public Book(String t) {
title = t;
}
// 实现接口方法
public int compareTo(Object b) {
Book book = (Book)b;
return (title.compareTo(book.title));
}
}
public class TestTreeSet {
public static void main(String[] args) {
Book b1 = new Book(“yiyi”);
Book b2 = new Book(“titi”);
Book b3 = new Book(“bibi”);
TreeSet<Book> ts = new TreeSet<Book>();
ts.add(b1);
ts.add(b2);
ts.add(b3);
System.out.print(ts);
}
}

public class TestComparator implements Comparator<Book> {
// 实现接口方法
public int compare(Book b1, Book b2) {
return (b1.title.compareTo(b2.title));
}
public static void main(String[] args) {
TestComparator tc = new TestComparator();
TreeSet<Book> tree = new TreeSet<Book>(tc);
tree.add(new Book(“zizi”));
tree.add(new Book(“cici”));
tree.add(new Book(“mimi”));
tree.add(new Book(“fifi”));
System.out.print(tree);
}
}

Map 数据结构的使用(键名不可重复)

public class TestMap {
public static void main(String[] args) {
HashMap<String, Integer> scores = new HashMap<String, Integer>();
scores.put(“Kathy”, 40);
scores.put(“Bert”, 50);
System.out.println(scores);
}
}

泛型与多态

如果方法的参数是 Animal数组,那么它就能够取用 Animal次类型的数组。也就是说,如果方法是这样声明的:void foo( Animal[] a ) {} 。 若Dog 有 extends Animal,你就可以用以下两种方式调用 foo方法:foo(anAnimalArray); foo(aDogArray) 。

public class TestType {
public void go() {
Animal[] animals = { new Dog(), new Cat() };
Dog[] dogs = { new Dog(), new Dog() };
// 多态
takeAnimals(animals);
takeAnimals(dogs);
}
public void takeAnimals(Animal[] animals) {
// 多态参数: animals 可以是 Animal及其子类的对象数组
for (Animal a: animals) {
System.out.println(a);
}
}
}

什么是万用字符?有什么用?

使用万用字符,你可以操作集合元素,但不能新增集合元素。如此保证了程序执行期间的安全性。

public <T extends Animal> void takeThing(ArrayList<T> list) { }
// 等价于
public void takeThing(ArrayList<? extends Animal> list) { }

原文地址:http://www.cnblogs.com/LvJinshuai/p/16916896.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性