2016/04/19
package com.wode.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
/**
*
* @author Administrator
*集合框架
*/
public class Test04_19 {
public static void main(String[] args) {
/*集合:也就是数据的集合
特点:元素类型可以不同,集合长度可变,空间也是不固定的
JCF 集合框架 他提供了用于管理集合的接口和类
java 中对一些数据结构和算法进行了封装即集合,也是一种对象
Collection 包含List 接口和set接口*/
//----------------------------------------分了个线---------------------------------------
//List接口:一列数据,数据的内容可以重复,以元素安插来放置元素,不会从新排序
//List接口的常用实现包括ArrayList 和 LinkedList类
List list = new ArrayList();//实例化一个ArrayList() 对象
list.add("a");
list.add("b");
list.add("c");//使用ArrayList 中的add方法 在框架的结尾加上元素
System.out.println(list);
System.out.println(list.size());//size 方法查询长度
System.out.println(list.get(0));//get 方法查询下标所对应的元素
list.set(0, "a被改变了");//set 方法改变下标相对应的元素
System.out.println(list.toString());
list.remove(1);//remove 方法 删除下标相对的元素
System.out.println(list.toString());
/*LinkedList类和ArrayList 相似其方法也相似 其两者的区别为:
ArrayList:使用广泛,在频繁操作增删改的适合不适用,最适合查询
LinkedList:适合频繁的操作的时候使用
☆重点:
Vector:他与ArrayList相似 其方法也相似,而且他的线程安全,但性能低于ArrayList*/
//----------------------------------------分了个线---------------------------------------
/*泛型:
为什么需要泛型:集合元素没有任何的限制,这样可能会引发一些问题。
例如:如果我们想创建一个只能保存Student类的集合,但是别人一样
可以吧一个Integer 类型的对象放进去,所以可能引发异常。
所谓泛型:就是允许在定义类、接口指定类型形式参数,这个类型形式参数
将在声明变量、创建对象时确定(即传入的实际参数)
总之:泛型代表一种约束 */
List <Integer> list2 = new LinkedList<>();//后面的<>里可以不填 因为前面已经限制
//实例化了一个LinkedList 对象,并用一个List类型的引用变量list2指向他
//其中的<>里的 就是泛型 规定为 Integer 类型 如果放入其他类型在编译的时候就会报错
//----------------------------------------分了个线---------------------------------------
/*Iterator :
Iterator接口是一种用于遍历集合的接口。所谓遍历,是指从集合中取出每一个元素的过程。
Iterator(也叫"迭代器"):对Collection进行迭代的"迭代器"*/
Iterator it = list.iterator();//迭代器的模型
while(it.hasNext()){//hasNext 有无元素是否可以迭代 是返回true
System.out.println(it.next());//next 返回集合里的下一个元素
}
//----------------------------------------分了个线---------------------------------------
/* Set接口:一列数据,但是他的数据不能重复,他使用自己内部的排列机制来放置元素
Set接口的常用实现包括了HashSet类和TreeSet类
HashSet:使用频繁,但是他不能加重复的数据。(通过哈希码值来判断,
因为每一个对象的哈希码值都不一样)而且他会自动的排序(次排序并不是
使用字典顺序来排序)
TreeSet:速度慢,因为他要排序(字典排序)
☆重点:
List是有序的而Set是无序的:这里的有序并是指元素插入的顺序,与字典
顺序无关。*/
Set<String> set = new HashSet<>();
set.add("c");
set.add("b");
set.add("a");
Set<String> set1 = new TreeSet<>();
set1.add("c");
set1.add("b");
set1.add("a");
set1.add("e");
System.out.println(set);//HashSet 会按照他内部的排序 并不是以字典形式排序
System.out.println(set1);//TreeSet 会以字典形式排序 但是他速度慢
System.out.println(set.size());
System.out.println(set1.size());//HashSet TreeSet 都有size 方法
System.out.println(set.contains("b"));
System.out.println(set1.contains("f"));//contains 方法如果此 set 包含指定元素,则返回 true。
System.out.println(set.isEmpty());
System.out.println(set1.isEmpty());//isEmpty 方法如果此 set 不包含任何元素,则返回 true。
set.clear();// clear 方法 从此 set 中移除所有元素。
//总之 ArrayList 和 LinkedList类 有的方法 HashSet类和TreeSet类 都有
//----------------------------------------分了个线---------------------------------------
/*Map接口:是Java集合框架不同于Collection接口的另一种重要接口,他对应的是种从键(Key)到值(Value)
的对应关系的集合。Key和Value 可以是任何引用类型的数据。Key不能重复但是Value可以重复。
在Map接口里有两个类分别为: HashMap类和TreeMap类 常用的是HashMap类 TreeMap类中的基本方法和HashMap相似*/
Map<String, String> map = new HashMap<>();
map.put("xg", "西瓜");
map.put("pg", "苹果");
map.put("cm", "草莓");//put 方法 是在尾部加上 元素
map.put("xg", "西瓜");//Key重复的两个 元素 并不能增加 所打印的也就只有三个元素
System.out.println(map);
System.out.println(map.hashCode());
System.out.println(map.isEmpty());//isEmpty 如果此映射不包含键-值映射关系,则返回 true。
System.out.println(map.keySet());//keySet 方法返回此映射中所包含的Key键的 Set 视图。
map.remove("cm");//remove 方法 从此映射中移除指定Key键的映射关系(如果存在)。
System.out.println(map);
}
}