集合

来源:互联网 发布:阿里云centos6升级到7 编辑:程序博客网 时间:2024/05/16 18:52
1.TreeSet

特点:采用红黑树结构算法,添加到TreeSet集合中的元素必须是可排序的

例:

import java.util.Iterator;
import java.util.TreeSet;
/**
 * @author wx
 * TreeSet 示例
 */
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet ts=new TreeSet();
ts.add("zhangsan");
ts.add("lisi");
ts.add("wangwu");
ts.add("zhaouliu");
ts.add("");
Iterator it=ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}


2.List集合

特点:添加的元素允许重复而且有序。
   添加到List集合中的元素都会有一个整数类型的序号,来表示当前元素添加的顺序(这个序号也就是元素的索引);
原理:

List集合底层实际上是通过一个动态的数组来保存数据的,数组可以根据集合中元素的个数,动态扩展或者缩小数组的容量。


实现类:
ArrayList
LinkedList;
Vector

ArrayList类:
ArrayList是使用数组结构实现的List集合
优点:
对于使用索引取出元素有较好的效率
它使用索引来快速定位对象
缺点:
元素做删除或插入速度较慢
因为使用了数组,需要移动后面的元素以调整索引顺序。

LinkedList
LinkedList是使用双向链表实现的集合。
LinkedList新增了一些插入、删除的方法。
优点:
对频繁的插入或删除元素有较好的效率
适合实现栈(Stack)和队列(Queue)

Vector:
和ArrayList操作基本一致,区别在于Vector是线程安全的,
ArrayList是线程不安全的,所以ArrayList查找数据的效率要

高于Vector。

例1:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
 * @author wx
 *
 */
public class Test2 {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
list.add("zhangsan");
list.add(100);
list.add(true);
list.add("lisi");
list.add("lisi");
ListIterator it=list.listIterator();
while(it.hasNext()){
System.out.println(it.next());
}

for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}

例2:

import java.util.LinkedList;
/**
 * @author wx
 * LinkedList 示例
 */
public class Test3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList list=new LinkedList();

list.add("张三");
list.add(100);
list.offer(200);
list.addLast("lisi");
list.addFirst("wangwu");

for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}

例3:

import java.util.Enumeration;
import java.util.Vector;
/**
 * @author wx
 *  Vector
 */
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Vector vc=new Vector();

vc.add("zhangsan");
vc.add("lisi");
System.out.println(vc.firstElement());

Enumeration en=vc.elements();
while(en.hasMoreElements()){
System.out.println(en.nextElement());
}
}
}

3.Map接口

Map接口的特点:
Map集合中是以键值对的形式存放数据的

Map集合中存放的键必须是唯一的,因为在Map集合中键是通过
Set来存放。
Map集合中常用String作为键.
实现类:
HashMap

LinkedHashMap

Hashtable--->Properties

TreeMap

HashMap:
检索数据的效率非常高

在HashMap中允许null作为键和值。

HashMap中输出的数据没有顺序保证。

Hashtable和HashMap的区别:
Hashtable是线程安全的,而且在Hashtable中null不能作为
键和值。

HashMap是线程不安全的,null可以作为键和值


Properties属性文件操作类
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性集中每个键及其对应值都是一个字符串
不建议使用 put 和 putAll 这类存放元素方法,应该使用 setProperty(String key,String value)方法,因为存放的“键-值”对都是字符串。类似取值也应该使用getProperty(String key).
不支持泛型操作


例1:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
/**
 * @author wx
 * HashMap 示例
 */
public class Test5 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap hm=new HashMap();
hm.put("a", "zhangsan");
hm.put("b", "lisi");
hm.put("c", "wangwu");
hm.put(null, null);
System.out.println(hm);

Set set=hm.keySet();
Iterator it=set.iterator();
while(it.hasNext()){
System.out.println(hm.get(it.next()));
}
}
}

例2:

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;
/**
 * @author wx
 *
 */
public class Test6 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedHashMap lhm=new LinkedHashMap();
lhm.put("a", "zhangsan");
lhm.put("b", "lisi");
lhm.put("c", "wangwu");

System.out.println(lhm);

Set set=lhm.keySet();

Iterator it=set.iterator();
while(it.hasNext()){
Object obj=it.next();
System.out.println(obj+"-->"+lhm.get(obj));
}
}
}

例3:

import java.util.Hashtable;
/**
 * @author wx
 *
 */
public class Test7 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Hashtable ht=new Hashtable();
ht.put("a", "zhangsan");
ht.put(null, null);

System.out.println(ht);
}
}

例4:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * @author wx
 *
 */
public class Test8 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//以流的形式读取属性文件
InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties");
//把读取的内容加载到Properties对象中
Properties p=new Properties();
try {
p.load(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
p.setProperty("name", "tianqi");
//根据键获取值
String id=p.getProperty("id");
String name=p.getProperty("name");
String age=p.getProperty("age");
String address=p.getProperty("address");
System.out.println(id+name+age+address);
}
}


4.集合选择要求
选择标准:
存放要求
无序-Set
有序-List
“key-value”对-Map
读和改的效率
Hash*-两者都最高
Array*-读快改慢
Linked*-读慢改快



0 0