简述Java集合框架

Java集合框架是Java的基础,也是工作中最长使用的,那么就简单总结下java类库中一些面试容易遇到的问题,以及这里集合框架的简单使用,以及如何使用能达到高效率。

Java中最常用使用的集合类主要有,
Collection、List、Set、Map、Iterator、Enumeration、Query等等
下图中主要展示一些最常用到的接口、类和常用子类


如图所示,在最常用的三个集合中,List和Set是继承与Collection接口的,而Map和Collection毫无关系。

可以看到Collection接口的定义方式:
public interface Collection<E> extends Iterable<E> (JDK1.5后都支持泛型)

一般开发中,基本不直接使用Collection接口进行开发,而是一些继承于它的子接口,主要有List、Set、Queue等
List和Set接口的定义方式:
public interface List<E> extends Collection<E>
public interface Set<E> extends Collection<E> 
Queue队列(具体使用详见api)
public interface Queue<E> extends Collection<E> 

boolean add(E e);   // 将指定的元素插入此队列
boolean offer(E e);  // 将指定的元素插入此队列,此方法通常要优于 add(E)
E remove();   // 将指定的元素插入此队列
E poll();   // 获取并移除此队列的头,如果此队列为空,则返回 null。
E element(); //  获取,但是不移除此队列的头。
E peek();  // 获取但不移除此队列的头;如果此队列为空,则返回 null。

而Map类直接实现Serializable接口
class Map implements Serializable

至于实现Serializable接口的主要作用,无非就是便于实例化,表示该类可以序列化.序列化的目的是将一个实现了Serializable接口的对象转换成一个字节序列。


List接口(可以存放重复的数据)

子类:ArrayList、Vector、LinkedList
List接口的最常使用就是 List list = new ArrayList();还有一种Vector vector = new Vector();(特殊情况下使用)
一些常见的面试题,会问ArrayList、Vector和LinkedList的区别?
Vector是线程同步的,安全的(执行效率低,所有方法都加synchronized(如:public synchronized int size()),ArrayList是线程不同步的(如:public int size())(效率高)。当元素超出初始大小时,ArrayList增加初始一半的大小,而Vector会增加一倍。两个都是查找速度非常快,增加和删除操作非常慢(和数组类似)。而LinkedList是一个双向链表,在添加和删除操作效率高,但是查找慢。

遍历list也有3种方式

public class TestList {
	
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		for (int j = 0 ; j <100000; j++) {
			list.add("list"+j);
		}
		
		/**
		 * 1 效率低
		 */
		for(String list1 : list) {
			System.out.println(list1);
		}
		
		/**
		 * 2 循环遍历, 效率高  重要的是先取出list的size,不要每次循环都去取
		 */
		int size = list.size();
		for(int i =0 ;i < size; i++) {
			list.get(i);
		}
		
		/**
		 * 3 迭代遍历,效率高,比第二中稍微慢一点
		 */
		Iterator<String> iter = list.iterator();
		while(iter.hasNext()) {
			iter.next();
		}
		
	}
	
}

Set接口(不能存放重复的内容,所有的重复内容靠hashCode()和equals()两个方法区分)
子类: 无序存放HashSet  有序存放TreeSet
声明: Set<String> set = new HashSet<String>();

public class TestSet {
	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		for(int i=0; i< 100000; i++) {
			set.add("testSet"+i);
		}
		
		/** 1 迭代遍历  */  
        for(Iterator<String> iterator = set.iterator();iterator.hasNext();){  
            System.out.print(iterator.next()+" ");  
        }  
          
        /** 2 for增强循环遍历  */  
        for(String value : set){  
            System.out.print(value+" ");  
        }  
	}
}

Queue 队列操作接口,采用FIFO(先进先出)的方式。先进先出指的是在一个集合中,会按照顺序增加内容


Map接口
Map接口每次操作的是一对对象,成对出现的,即二元偶对象,key--value,而collection、Set、List是单值操作,独立存在的。
public interface Map<K,V>
常用子类 
HashMap 无序存放,key不可重复(新)
HashTable 无序存放,key不可重复(老)
TreeMap 可以排序,按照key排序,key不可重复


package com.lj.collenction;

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

public class TestMap {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("1", "jordan");
		map.put("2", "kobe");
		map.put("3", "T-MAC");
		map.put("4", "paul");
		// 得到全部的key
		Set<String> keys = map.keySet();
		Iterator<String> iter = keys.iterator();
		while(iter.hasNext()) {
			String str = iter.next();
			System.out.println(str + " ");
		}
		
		// 得到全部的value
		Collection<String> values = map.values();
		Iterator<String> iterValue = values.iterator();
		while(iterValue.hasNext()) {
			String str = iterValue.next();
			System.out.println(str + " ");
		}
		
	}
}


猜你喜欢

转载自blog.csdn.net/u014682894/article/details/48415675