Java集合框架

本文介绍了Java.util包下的集合接口,包括List、Set和Map的特点及常用实现。详细解释了ArrayList、LinkedList、HashSet、TreeSet等集合类的使用方法,并通过代码示例展示了如何操作这些集合。

java.util包下的集合接口:
1.List
a.List集合的特点:
有序的,并且允许重复的数据存在,可以根据索引取值

b.常用的List集合框架:
  ArrayList :数组集合   很像队列
  Vector:线程同步(排队)
  Stack

c.ArrayList与Vector的区别:
性能方面,ArrayList采取了线程异步处理方式,效率更高,而Vector则采取线程同步(排队)方式。

d.LinkedList表示的是一个链表的操作类,这个类不仅实现了List接口,同时也实现了Queue(队列操作)接口,即采用FIFO(先进先出)的方式操作,就像在排队,队头永远指向新加入的对象。

代码如下:

package 作业;

import java.util.LinkedList;

public class Test {

	/**
	 * @param 测试LinkedList类
	 */
	public static void main(String[] args) {
		LinkedList<String> link=new LinkedList<String>();
        link.add("A");//向链表中添加数据
        link.add("B");
        link.add("C");
        System.out.println("初始化链表"+link);//输出链表内容
        link.addFirst("D");//在链表的表头增加内容
        link.addLast("E");//在链表的表尾增加内容
        System.out.println("增加之后的链表"+link);
       
        System.out.println(link.element());//用element()方法找表头,输出
        System.out.println(link);//找完之后的链表
        System.out.println(link.peek());//用peek()方法找到表头,并且不删除
        System.out.println(link);//找完之后的链表
        System.out.println(link.poll());//找到并删除链表的头
        System.out.println(link);//找完之后的链表
        /**
         * 用FIFO方式取出内容
         */
        for(int i=0;i<link.size()+1;i++){
        	System.out.print(link.poll()+";");
        }
	}

}

 
2.Set

a.Set集合的特点:
无序的,数据不可重复,按值查找,所有重复的内容都靠hashCode()和equals()两个方法来区别。
b.常用的Set集合:
  HashSet:迭代器操作,存放没有顺序 ,虽说是没有顺序,但是当输出的时候,按照一定的顺序,无论是什么类型的

迭代的意思:迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容就将其取出

Iterator接口中的常用方法:
hasNext() 判断是否有下一个值
next()取出当前元素

 LinkedHashSet:
 TreeSet:有序的存放

Set接口的常用子类,HashSet,TreeSet。HashSet散列存放,TreeSet有序,但是TreeSet类排序说明:1,不能自定义类排序;2,需要指定顺序规则排序,验证代码:

package 作业;

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

class Person{
	private String name;
	private int age;
	public Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String toString(){//重写toString()方法
		return "姓名:"+this.name+";年龄:"+this.age;
	}
}
public class TreeSetDemo {

	public static void main(String[] args) {
     Set<Person> set=new TreeSet<Person>();
     set.add(new Person("张三",30));
     set.add(new Person("李四",33));
     set.add(new Person("王五",35));
     set.add(new Person("赵六",37));
     set.add(new Person("孙七",38));
     System.out.println(set);
	}

}

 会报错:

 
Exception in thread "main" java.lang.ClassCastException: 作业.Person cannot be cast to java.lang.Comparable
	at java.util.TreeMap.put(Unknown Source)
	at java.util.TreeSet.add(Unknown Source)
	at 作业.TreeSetDemo.main(TreeSetDemo.java:22)

 所以必须要指定顺序,并且TreeSet中的每个对象所在的类都必须首先Comparable接口才可以正常使用,修正代码如下:

package 作业;

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

/**
 * 
 * 指定排列顺序
 *
 */
class Person implements Comparable<Person>{
	private String name;
	private int age;
	public Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String toString(){//重写toString()方法
		return "姓名:"+this.name+";年龄:"+this.age;
	}

public int compareTo(Person per){
	if(this.age>per.age){
		return 1;
	}else if(this.age<per.age){
		return -1;
	}else{
		return 0;
	}
}
}
public class TreeSetDemo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Set<Person> set=new TreeSet<Person>();
	     set.add(new Person("张三",30));
	     set.add(new Person("李四",33));
	     set.add(new Person("王五",35));
	     set.add(new Person("赵六",37));
	     set.add(new Person("孙七",38));
	     System.out.println(set);
	}

}

 

怎样得到值?
根据key值取value,先得到Key的Set集合,用keySet()方法得到视图,这样才可以迭代输出所有的key,然后再用get()方法取得
c.常用的Map集合:
 HashMap   TreeMap   HashTable   LinkedHashMap

 代码如下:

package 作业;

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

public class MapTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
        Map<String,String> map=new HashMap<String,String>();
        map.put("A", "wudi");
        map.put("B", "zhuling");
        map.put("C", "kejing");
        map.put("D", "chenjingting");
        String val=map.get("A");//根据key取出value
        System.out.println("取出的内容是:"+val);
        if(map.containsKey("B")){//查找指定的key是否存在
        	System.out.println("搜索的key存在");
        }else{
        	System.out.println("搜索的key不存在");
        }
        /*输出全部的key*/
        Set<String> keys=map.keySet();//得到全部的key
        Iterator<String> iter=keys.iterator();//实例化Iterator
        while(iter.hasNext()){
        	String str=iter.next();
        	System.out.println(str+"、");
        }
        /*输出全部的value*/
        Collection<String> values=map.values();
        Iterator<String> it=values.iterator();
        while(it.hasNext()){
        	String st=it.next();
        	System.out.println(st+"、");
        }
	}

}

 

总的来说,三种集合接口的用法是基本一致的,只不过是每种方法可能不太一样,像Map取值的话,就要先用keySet()方法;像HashSet,取值的话,要先用迭代器。

另外:

 

Collection接口  Map与其是同一级的
只有List和Set是它的子接口

Queue<E>也是Collection的子接口

(   <E>泛型 <>指定数据类型,不指定的话就可以是任何类型    )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值