Java集合类详解

collection接口

集合可理解为动态的对象数组,

特点:集合中的对象内容可以任意扩充;性能高,容易扩展和修改;

collection常用子类包括List; Set; Queue等子类。

Collection<T>:泛型接口,方法查询手册

List接口

  1. 可以存放任意的数据,而且在List接口中内容是可以重复的。

  2. 继承自collection<E>接口 ->List<E>接口 ->AbstractList<E>类-> ArrayList<E>类, Vector<E>类

  3. 常用子类:ArrayList;Vector

import java.util.ArrayList;
import java.util.List;

public class GenerateDemo02 {

	public static void main(String[] args) {
		// public class ArrayList<E> extends AbstractList<E> implements List<E>
		//第一种初始化
		List<String> Lists01 = new ArrayList<String>();
		Lists01.add("hello!");
		//第二种初始化
		ArrayList<String> lists02 = new ArrayList<String>();
		lists02.add("nihao");
		lists02.add("jikeyueyuan");
		lists02.add("jikeyueyuan");
		//通过循环遍历打印所有值
		for (int i = 0; i < lists02.size(); i++) {
			System.out.println(lists02.get(i));
		}
		//通过toString()打印所有值
		System.out.println(lists02.toString());
		System.out.println(lists02.indexOf("jikeyueyuan"));
	}
}
输出结果:
nihao
jikeyueyuan
jikeyueyuan
[nihao, jikeyueyuan, jikeyueyuan]
1

ArrayList

采用异步处理方式,高性能,速度高,属于非线程安全;

Vector

采用同步处理方式,性能低,属于线程安全;

set接口

与List接口相比,Set接口不能加入重复元素,但可以排序;

Set接口常用子类:散列存放 HashSet;有序存放 TreeSet

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class GenerateDemo02 {

	public static void main(String[] args) {

		TreeSet<String> ts = new TreeSet<String>();
		ts.add("C");
		ts.add("Bb");
		ts.add("E");
		ts.add("Ba");
		ts.add("A");
		ts.add("D");
		ts.add("F");
		System.out.println("TreeSet有序排列去掉重复:" + ts);
		
		HashSet<String> hs = new HashSet<String>();
		hs.add("Da");
		hs.add("F");
		hs.add("F");
		hs.add("B");
		hs.add("C");
		hs.add("Cd");
		hs.add("D");
		hs.add("D");
		hs.add("lastElement");
		System.out.println("HashSet无序排列去掉重复:" + hs);
	}
}
输出:
TreeSet有序排列去掉重复:[A, Ba, Bb, C, D, E, F]
HashSet无序排列去掉重复:[Cd, B, C, D, F, lastElement, Da]

Iterator接口

  1. 集合输出的标准操作

    标准做法使用

  2. 操作原理

    Interator是专门的迭代输出接口,迭代输出就是讲元素一个个进行判断,判断其是否有内容,如果有内容则内容取出来。单向输出的方式。

Java集合类详解

其中有三个方法:

hasNext();判断下一个是否还有元素

next(): 返回迭代的下一个元素;

remove():从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。

import java.util.ArrayList;
import java.util.Iterator;

public class GenerateDemo02 {

	public static void main(String[] args) {
		ArrayList<String> al = new ArrayList<String>();
		al.add("A");
		al.add("Bz");
		al.add("B");
		al.add("Bq");
		al.add("Bs");
		al.add("Ba");
		al.add("A");
		System.out.println(al);
		
		Iterator<String> iter = al.iterator();
		while(iter.hasNext()){
			String str = iter.next();
			if("A".equals(str)){
				//使用迭代器的remove删除元素不会出现问题,不能通过集合的remove删除元素
				iter.remove();	
			}else{
				System.out.println(str);
			}
		}
		
	}
}

集合使用迭代器输出的优势:

参考地址:http://zhidao.baidu.com/link?url=RS7FQqhsMHohIECR66tbxjK49MSiQxOy2IO5cb5GAAlqAMBB8QP-h2bbU1Xxnstsyfzq2REtLqU3_XKDTB-hdq

1.功能
迭代器,它是需要顺序迭代的,你无法随机挑选元素 .而利用for循环的方式,你可以随机的挑选元素.
2.效率
迭代器效率也比for循环的方式高些.
3.用处

在不需要挑选元素的时候尽量用迭代,在个性化比较强的地方,用FOR.

Iterator对象的remove方法是迭代过程中删除元素的唯一方法

  •  jdk5.0以上的for-each也是利用内部的iterator来遍历集合的(跟以前的iterator一样)获得的Iterator是一个内部类产生的迭代器,这个迭代器在调用next方法时,会检查列表是否被修改过,如果被修改过,就会抛出ConcurrentModificationException异常。

  • Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。

  • 所以 Iterator在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象,Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。

  • 参考地址:http://blog.csdn.net/ld513508088/article/details/8447135

Map接口

  1. 保存形式:

    key  -> value保存方法

  2. 常用子类:

    HashMap: 无序存放,key不允许重复,key都是唯一的;

    Hashtable: 无序存放,key不允许重复

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class GenerateDemo02 {

	public static void main(String[] args) {
		// .put()方法,.get()方法
		HashMap<Integer, String> hm = new HashMap<>();
		hm.put(1, "Hello");
		hm.put(2, "-");
		hm.put(3, "jkexueyuan");
		String str = hm.get(3);
		System.out.println(str);

		// 查询是否包含指定key或者value
		if (hm.containsKey(2) && hm.containsValue("Hello")) {
			System.out.println("key=2, value=Hello 存在");
		} else {
			System.out.println("key=2,value=Hello 不存在");
		}
		//通过迭代遍历元素
		//将map的key转换为set接口类型,set接口继承collection接口,也就是具有iterator方法
		Set<Integer> s = hm.keySet();
		Iterator<Integer> iter = s.iterator();
		while(iter.hasNext()){
			//调用一次.next后会指向下一个元素,所以后面使用该值需要先保存一下
			Integer i = iter.next();
			System.out.println(i + ":" + hm.get(i));
		}
		//得到所有的value值,因为该值不唯一,所以需要转换到colletcion接口类型
		Collection<String> str1 = hm.values();
		Iterator<String> iter1 = str1.iterator();
		while(iter1.hasNext()){
			System.out.println(iter1.next());
		}	
	}
}






你可能感兴趣的:(Java集合类详解)