Java 中的集合

来源:互联网 发布:每日生产报表软件 编辑:程序博客网 时间:2024/06/05 00:25

初学Java ,看的是老韩的视频,总结了一下:

用途

数据的容器,储存各种各样的数据


集合框架--使用

 都需要引入这个包:import java.util.*;

分类:

 List结构的集合类

ArrayList类,Vector类,

LinkedList类,Stack类

 

1.ArrayList类的使用(无同步性,线程不安全)

 

//java集合类用法--List结构--ArrayList类

import java.util.*;//集合类基本上在util包中

public class Demo139 {

public static void main(String[] args) {

//定义ArrayList对象

ArrayList al=new ArrayList();

//显示大小

System.out.println("al大小:"+al.size());

 

//向all中加入数据(类型是Object)

//创建一个职员

Clerk clerk1=new Clerk("宋江",50,1000);

Clerk clerk2=new Clerk("吴用",45,1200);

Clerk clerk3=new Clerk("林冲",35,1300);

//将clerk1加入到al中

al.add(clerk1);

al.add(clerk2);

al.add(clerk3);

//可不可以放入同样的对象?

al.add(clerk1);

//显示大小

System.out.println("al大小:"+al.size());

//如何访问al中的对象(数据)

//访问第一个对象

//Clerk temp=(Clerk)al.get(0);

//System.out.println("第一个人的名字是:"+temp.getName());

//遍历al所有的对象(数据)

for(int i=0;i<al.size();i++){

Clerk temp=(Clerk)al.get(i);

System.out.println("名字:"+temp.getName());

}

//如何从al中删除一个对象

al.remove(1);

System.out.println("===删除吴用===");

//遍历al所有的对象(数据)

for(int i=0;i<al.size();i++){

Clerk temp=(Clerk)al.get(i);

System.out.println("名字:"+temp.getName());

}

}

}

 

 

2.LinkedList集合类的使用方法  (感觉是队列)

//LinkedList集合类的使用import java.util.*;public class Demo141 {public static void main(String[] args) {LinkedList ll=new LinkedList();Empp emp1=new Empp("sa01","aa",1.2f);Empp emp2=new Empp("sa02","bb",1.2f);Empp emp3=new Empp("sa03","cc",1.2f);     //addFirst表示把emp1加载(链表)队列的最前面ll.addFirst(emp1);//addFirst方法是可以插入在数组之前ll.addFirst(emp2);//也可以理解为addFirst方法是后进先出的方法      //addLast表示把emp3加载(链表)队列的后面ll.addLast(emp3);System.out.println("测试LinkedList集合类中的addFist及addLast方法");for(int i=0;i<ll.size();i++){System.out.println(  ((Empp)ll.get(i)).getName()  );        //注意:这里包了好几层括号       }//remove表示将某一条数据进行删除ll.remove(emp1);//将ll中的emp1数据删除System.out.println("测试LinkedList集合类中的remove方法");for(int i=0;i<ll.size();i++){System.out.println(((Empp)ll.get(i)).getName());}ll.removeAll(ll);//清除整个链表System.out.println("测试LinkedList集合类中的remmoveall方法");for(int i=0;i<ll.size();i++){System.out.println(((Empp)ll.get(i)).getName());}}}

===============================================================================

3.Vector集合类的使用(线程安全具有同步性)

//Vector集合类(向量)的使用方法

import java.util.*;

public class Demo142 {

public static void main(String[] args) {

//Vector的用法

Vector vv=new Vector();

AEmp emp1=new AEmp("1","aa",1.2f);

AEmp emp2=new AEmp("2","bb",1.2f);

AEmp emp3=new AEmp("3","cc",1.2f);

vv.add(emp1);

vv.add(emp2);

vv.add(emp3);

//遍历

for(int i=0;i<vv.size();i++){

AEmp emp=(AEmp)vv.get(i);

System.out.println(emp.getName());

}

}

}

 

 

 

===============================================================================

4.Stack集合类(栈)的使用

//Stack集合类(栈)的使用方法

package com.haiding.set;

import java.util.*;

public class Demo143 {

public static void main(String[] args) {

//Stack的用法

Stack stack=new Stack();

AEmp emp1=new AEmp("s1","aa",1.2f);

AEmp emp2=new AEmp("s2","bb",1.2f);

stack.add(emp1);  //栈是往前加的

stack.add(emp2);

for(int i=0;i<stack.size();i++){

System.out.println(((AEmp)stack.get(i)).getName());

}

}

}

 

 

集合框架--深入讨论

ArrayList和Vector的区别

 

1、同步性

 

Vector   是线程同步的,线程安全的。

ArrayList是线程异步的,因此ArrayList中的对象并不是线程安全的,但是速度快。

 

 

2、数据增长

Vector缺省情况下自动增长原来一倍的数组长度,

ArrayList是原来的50%,

所以如果你要在集合中保存大量的数据那么使用Vector有一些优势

 

 

 

 

 

Map结构的集合类

HashMap类,Hashtable类

HashMap集合类的使用[Demo143.java]

//HashMap集合类的使用

import java.util.*;

public class Demo143 {

public static void main(String[] args) {

//创建HashMap对象

HashMap hm=new HashMap();

Emp emp1=new Emp("s001","aa",3.4f);

Emp emp2=new Emp("s002","bb",5.6f);

Emp emp3=new Emp("s003","cc",1.2f);

//将emp放入到hm中

//hm.put(null,null);//可以放空值

hm.put("s001", emp1);

hm.put("s002", emp2);

hm.put("s002", emp3);//不允许key重复,所以emp3会覆盖emp2

//如果你要查找编号是s002

if(hm.containsKey("s002")){//取键值containsKey

System.out.println("有该员工");

//如何取出,键<key>值

Emp emp=(Emp)hm.get("s002");

System.out.println("名字"+emp.getName());

}else{

System.out.println("没该员工");

}

//遍历HashMap中所有的key和value值

//Iterator迭代

Iterator it=hm.keySet().iterator();

//hasNext返回一个boolean值

while(it.hasNext()){

//如果有下一个取出key值

String key=it.next().toString();

//通过key取出value

Emp emp=(Emp)hm.get(key);

System.out.println("名字:"+emp.getName());

System.out.println("工资:"+emp.getSal());

}

}

}

 

 

-------------------------------------------------------------------------------

Hashtable集合类的使用(Hashtable具有同步性,线程安全)

import java.util.*;

public class Demo144{

public static void main(String []args){

Hashtable ht=new Hashtable();//Hashtable与HsahMap在用法上一致

Emp emp4=new Emp("s101","a1",2.2f);

Emp emp5=new Emp("s102","a2",1.2f);

Emp emp6=new Emp("s103","a3",4.2f);

ht.put("s101", emp4);

ht.put("s102", emp5);

ht.put("s103", emp6);

//遍历

for(Iterator it=ht.keySet().iterator();it.hasNext();){

String key=it.next().toString();

Emp emp=(Emp)ht.get(key);

System.out.println("名字:"+emp.getName()+"\t工资:"+emp.getSal());

}

}

}

 

-------------------------------------------------------------------------------

HashMap和Hashtable集合类的区别

 

同步性

Hashtable是线程同步的线程安全的

HashMap则是线程异步的不是线程安全的。但是效率高

 

值(了解)

HashMap可以让你将空值作为一个表的条目的key或value但是Hashtable是不能放入空值的(null)

 

同步和线程安全性: 

同步和线程安全在于

一个数据对象,如果同时多个线程访问,只能有一个线程可以访问到,其他的会排队等待。