集合

集合

集合类的分类
* (一)List 结构集合类
* ArrayList LinkedList Vector Stack
* (二)Map 结构集合类
* HashMap HashTable
* (三)Set 结构集合类
* HashSet TreeSet
* (四)Queue 结构集合类和 Queue接口

一、ArrayList

1、什么是ArrayList

    ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:

  • 动态的增加和减少元素
  • 实现了ICollection和IList接口
  • 灵活的设置数组的大小

大家知道,数组是静态的,数组被初始化之后,数组长度就不能再改变了。ArrayList是可以动态改变大小的。那么,什么时候使用Array(数组),什么时候使用ArrayList?答案是:当我们不知道到底有多少个数据元素的时候,就可使用ArrayList;如果知道数据集合有多少个元素,就用数组。

2、初始化ArrayList的两种方法

  方式一:
      ArrayList<String> list = new ArrayList<String>();
      String str01 = String("str01");
      String str02 = String("str02");
      list.add(str01);
      list.add(str02);
  方式二:
      ArrayList<String> list = new ArrayList<String>(){{add("str01"); add("str02");}};  

3.ArrayList常用方法

 ArrayList<String> list = new ArrayList<String>();

增加元素到链表中

  list.add("Item1");

从链表中删除元素

list.remove("Item3");

获取链表中的元素

 boolean element = list.contains("Item5");
 System.out.println("Checking if the arraylist contains the object Item5: " + element);

String item = list.get(0);
 System.out.println("The item is the index 0 is: " + item);


修改某个元素

 list.set(1, "NewItem");
   System.out.println("The arraylist after the replacement is: " + list);

搜索元素

 System.out.println("Retrieving items with loop using index and size list");
for (int i = 0; i < list.size(); i++) {
System.out.println("Index: " + i + " - Item: " + list.get(i));
 }

检查链表是否为空

boolean check = list.isEmpty();
System.out.println("Checking if the arraylist is empty: " + check);

获取链表大小

int size = list.size();
 System.out.println("The size of the list is: " + size);
public class Xs {
    private String xingming;
    private int xuehao;
    private int chengji;
    
  Xs(String xingming,int xuehao ,int chengji){
        this.xingming=xingming;
        this.xuehao=xuehao;
        this.chengji=chengji;
    }
    public String getXingming(){
        return xingming;
    }
    public int getXuehao(){
        return xuehao;
    }
    public int chengji(){
        return chengji;
    }
}



public class Collection_2 {
    public static void main(String[] args){
        ArrayList aa1=new ArrayList();
        System.out.println("大小为"+aa1.size());
        Xs xs1=new Xs("悟空",15,90);
        Xs xs2=new Xs("八戒",13,70);
        Xs xs3=new Xs("沙僧",15,90);
        Xs xs4=new Xs("小白龙",20,80);
        aa1.add(xs1);
        aa1.add(xs2);
        aa1.add(xs3);
        System.out.println("大小为"+aa1.size());
        
        //aa1.remove(1);
        /*for(int i=0;i<aa1.size();i++){
            Xs tv=(Xs)aa1.get(i);
            System.out.println("第"+(i+1)+"个学生姓名是"+tv.getXingming());
        }*/
        
        aa1.add(1,xs4);
        for(int i=0;i<aa1.size();i++){
            Xs tv=(Xs)aa1.get(i);
            System.out.println("第"+(i+1)+"个学生姓名是"+tv.getXingming());
        }
    }
}

二、LinkedList

LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.
LinkedList的构造函数如下
1. public LinkedList():  ——生成空的链表
2. public LinkedList(Collection col):  复制构造函数

public class Collection_LinkedList {

	public static void main(String[] args) {
		LinkedList bb=new LinkedList();
		Sp sp1=new Sp("001","话梅",5f);
		Sp sp2=new Sp("002","薯片",8f);
		
		
		bb.addFirst(sp1);//后进先出。先放进去的在最里面,后放进去的,在最外面
		bb.addFirst(sp2);//
		
		for(int i=0;i<bb.size();i++)
		{
			//System.out.println(((Sp)bb.get(i)).getMingcheng());
			//System.out.println(((Sp)bb.getFirst()).getMingcheng());
			//System.out.println(((Sp)bb.getLast()).getMingcheng());
		}
		
		bb.addLast(sp1);//先放进去的,先出去
		bb.addLast(sp2);
		
		for(int i=0;i<bb.size();i++)
		{
			//System.out.println(((Sp)bb.get(i)).getMingcheng());
			//System.out.println(((Sp)bb.getFirst()).getMingcheng());
			//System.out.println(((Sp)bb.getLast()).getMingcheng());
		}
		
		
	}

}

  

 二、Vector和Stack

 

public class Collection_Vector {

    public static void main(String[] args) {
        Vector cc=new Vector();
        Sp sp1=new Sp("001","巧克力",20f);
        Sp sp2=new Sp("002","果脯",10f);
        
        cc.add(sp1);
        cc.add(sp2);
        for(int i=0;i<cc.size();i++)
        {
            System.out.println(((Sp)cc.get(i)).getMingcheng());
            
        }
        
        /*Stack dd=new Stack();
        Sp sp3=new Sp("003","巧克力3",20f);
        Sp sp4=new Sp("004","果脯4",10f);
        dd.add(sp3);
        dd.add(sp4);
        for(int i=0;i<dd.size();i++)
        {
            System.out.println(((Sp)dd.get(i)).getMingcheng());
            
        }*/
        
        

    }

}

 三、HashMap

public class Collection_HashMap {

    public static void main(String[] args) {
        HashMap ee=new HashMap();
        Sp sp1=new Sp("001","香肠",20);
        Sp sp2=new Sp("002","果脯",20);
        //Sp sp3=new Sp("003","面包",20);
        ee.put("001", sp1);
        ee.put("002", sp2);
        //ee.put("003", sp3);
        
        /*if(ee.containsKey("002"))
        {
            System.out.println("该食品信息为:");
            Sp sp=(Sp)ee.get("002");
            System.out.println(sp.getMingcheng());
            System.out.println(sp.getJiage());
        }
        else
        {
            System.out.println("对不起,没有该食品!");
        }*/
        /*for(int i=0;i<ee.size();i++)
        {
            ee.get();
        }*/
        //遍历不可以用for循环
        Iterator it=ee.keySet().iterator();
        while(it.hasNext())
        {
            String key=it.next().toString();
            Sp sp=(Sp)ee.get(key);
            System.out.println("食品名称:"+sp.getMingcheng());
            System.out.println("食品名称:"+sp.getJiage()+"元");
            
            
        }
    }

}

四、集合类的比较

ArrayList 和Vector 的区别

ArrayList 和 HashMap 都是线程异步的,所以他们的特点是效率高但是安全性低

Vector 和 HashMap 都是 线程同步的,所以他们的特点 都是 效率低但是 安全性低

五、泛型

package Collection_Example;

import java.util.ArrayList;

public class Collection_fanxin {

	public  void main(String[] args) {
		ArrayList<Ls> ff=new ArrayList<Ls>();//通过泛型将类型定下来
		Ls ls1=new Ls("薯片",5f);
		ff.add(ls1);
		Ls cls=(Ls)ff.get(0);
		// Yl hyl=(Yl)ff.get(0);
		

	}
	
class Ls
{
	private String mingcheng;
	private float jiage;
	Ls(String mingcheng,float jiage)
	{
		this.mingcheng=mingcheng;
		this.jiage=jiage;		
	}
}
class Yl
{
	private String mingcheng;
	private float jiage;
	private String yanse;
	Yl(String mingcheng,float jiage,String yanse)
	{
		this.mingcheng=mingcheng;
		this.jiage=jiage;
		this.yanse=yanse;
		
	}
	}

}

  

六、反射机制

package Collection_Example;

import java.lang.reflect.Method;

public class Collection_fanshejizhi {
    public static void main(String[] args)
    {
        //Bh<String> hw1=new Bh<String>("货物1");
        //Bh<Integer> hw2=new Bh<Integer>(123);
        Bh<Wj> hw3=new Bh<Wj>(new Wj());
    }
}
class Wj
{    
    public void wan()
    {
        System.out.println("正在玩儿游戏!" );
        
    }
    public int jiafa(int a,int b)
    {
        return a+b;
    }
}
class Bh<L>
{
    private L l;
    Bh(L l)
    {
        this.l=l;    
    }
    public void lxmc()
    {
        
        System.out.println("类型是"+l.getClass().getName());
        Method []a=l.getClass().getDeclaredMethods();
        /*
         for(int i=0;i<a.length;i++)
         {
             System.out.println("函数名为"+a[i].getName());
         }
         * 
         * */
    }
}
原文地址:https://www.cnblogs.com/SGRBOY/p/10632369.html