---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
集合框架包括集合与映射(collection and Map),以及它们的子类(容器类)。
1)List :元素有先后次序的集合,元素有 index 位置,元素可以重复,继承自 Collention 接口,
实现类:ArrayList,Vector,LinkedList。
2)Set :元素无序,不能重复添加,是数学意义上的集合,继承自 Collection 接口,
实现类:HashSet(是一个只有 Key 的 HashMap)。
3)Collection 集概念,没有说明元素是否重复和有序,使用集合的根接口,很少直接使用。
4)Map 描述了(key :value)成对放置的集合,key 不重复,Value 可以重复(key 重复算一个)。
实现类:HashMap(散列表算法实现)。
TreeMap(二叉排序树实现,利用 Key 排序)。
Map 适合检查查找。
Collection 接口 表示集合的概念
■ List 接口
■ Set 接口
List 接口 表示有序线性表的概念
ArrayList 底层实现是数组
LinkedList 底层实现是链表
Set 接口 表示无序不重复的概念
HashSet
1. 线性表:List
List 表示有先后次序的对象集合,比如:歌曲列表。
1)ArrayList = Object[] + 线性表操作(增删改查)。
2)StringBuilder = char[] + 操作(增删改查)。
ArrayList 与 StringBuilder 相比,操作基本相同,但是ArrayList 除了可以添加 String,还可以添加其他对象。
ArrayList(1.2版本以后的)是使用变长数组算法实现的,ArrayList 继承自 List。
1)ArrayList 和 Vector 的比较
Vector(1.0版本提供的),线程安全,效率稍低,也是使用变长数组算法实现的,继承自 List 接口。
ArrayList ,线程不安全,效率高速度快(现在较常用)。
2)ArrayList 和 LinkedList 的比较
LinkedList 是采用双向循环链表实现的 List 。
ArrayList 是采用变长数组算法实现的 List 。
3)List集合的实现
LinkedList采用双向循环链表实现。
ArrayList变长数组算法实现(新版本提供),特点:快,非线程安全。
Vector变长数组算法实现(早期版本提供),特点:慢,线程安全。
2. HashMap
HashMap 以键-值对(关键字:值)的形式存储对象,关键字 key 是唯一的、不重复的。
1)key 可以是任何对象,Value 可以是任何对象。
2)(key :value)成对放置在集合中。
3)重复的 key 算一个,重复添加是替换操作(会覆盖原来的元素)
4)根据 key 的散列值计算散列表,元素按照散列值(不可见)排序。
5)HashMap 默认的容量:16 ,默认加载因子(加载率)0.75。
6)HashMap 根据 key 检索查找 value 值。
import java.util.HashMap;
public class HashMapDemo {
public static void main(String[] args) {
HashMap users = new HashMap();
users.put("Tom", new User("Tom", "123", 5));
users.put("Jerry", new User("Jerry", "123", 6));
users.put("Andy", new User("Andy", "abc", 5));//将被覆盖
users.put("Andy", new User("Andy", "123", 7));
System.out.println(users);
}
}
class User{
String name;
String pwd;
int age;
public User(String name, String pwd, int age){
this.name = name;
this.age = age;
this.pwd = pwd;
}
public String toString(){
return name+":"+age;
}
}
3. 集合的迭代
集合的迭代,是一种遍历算法。
1)迭代操作举例:播放器列表的“逐个播放” ;将扑克牌 “逐一发放”。
2)java 使用 Iterator 接口描述了迭代模式操作,Iterator 中的方法,专门为 while 循环设计。
3)Iterator 的实例可以从集合对象获得,是这个集合的一个元素序列视图,默认包含一个操作游标(在第一个元素之前)。
hasNext() 方法,可以检查游标是否有下一个元素。
next() 方法,移动游标到一个元素,并且返回这个元素的引用。
使用while 循环配合这两个方法,可以迭代处理集合的所有元素。
4)迭代时可以使用迭代器 remove() 方法删除刚刚迭代的元素。
迭代时不能用集合方法(add,remove,set)更改集合元素。
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
Collection<String> eggs = new HashSet<String>();
eggs.add("鸡蛋");
eggs.add("鸭蛋");
eggs.add("鸟蛋");
Iterator<String> ite = eggs.iterator();
while(ite.hasNext()){
String egg = ite.next();
System.out.println(egg);
}
}
}
4. 集合的工具类 Collections
同数组的工具类 Arrays 相同,集合的工具类为 Collections,其中提供了许多的方法,诸如排序、二分查找、打乱、填充等操作。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
List<String> names = new ArrayList<String>();
names.add("Tom");
names.add("Jerry");
names.add("Black");
names.add("Andy");
names.add("Lee");
//1. 排序
Collections.sort(names);
System.out.println(names);
//2. 二分查找
int index =
Collections.binarySearch(names, "Jerry");
System.out.println(index);
//3. 乱序
Collections.shuffle(names);
System.out.println(names);
}
}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------