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);
 }
}

原文地址:https://www.cnblogs.com/chenyangpeng/p/5409874.html