java 高级api_JAVA高级——集合类

集合的概念:

Java中集合类是用来存放对象的

集合相当于一个容器,里面包容着一组对象 —— 容器类

其中的每个对象作为集合的一个元素出现

Java API提供的集合类位于java.util包内

Java中数组与集合的比较:

数组也是容器,它是定长的,访问较快,但是数组不会自动扩充

数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象

Java中集合框架层次结构

3a08d689df4dfedbb1e23e32eb8bfb99.png

Collection接口

Set接口和List接口的父类。

Set - 无序的集合;不允许重复(如 HashSet)

List - 有序的集合;允许重复(如 ArrayList、LinkedList)

Set接口

用来包含一组 无序无重复 的对象

无序 — 是指元素存入顺序和集合内存储的顺序不同

无重复 — 两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1和e2重复

Set有两种主要的集合实现类:

HashSet — HashSet的特性在于其内部对象的散列存取,即采用哈希技术

TreeSet — TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

/*

* Collection接口:Set - 无序的集合;不允许重复;List - 有序的集合;允许重复

*/

public class TestSet {

/**

* @param args

*/

public static void main(String[] args) {

/*set 无序 不重复

* 无序 — 是指元素存入顺序和集合内存储的顺序不同

*/

/*

* 1. Set是“无序”的(利用hash算法存的 假无序,每次结果都一样)

* 即:程序存放的顺序和执行的set顺序无关

*

* 2. Set是不重复的。

*/

//采用哈希技术存储乱序

Set s = new HashSet();

//存储是按照排序存储的 注意 S内的内容要格式统一,符合排序的原则

//Set s = new TreeSet();

s.add("1");

s.add("3");

s.add("2");

//对格式不限制

//s.add(new Integer(4));

//自动去重

s.add("3");

System.out.println(s);

/*

* 遍历set类型的数据

*/

//迭代器Iterator

Iterator it = s.iterator();

while(it.hasNext())

{

String str = (String)it.next();

System.out.println(str);

}

}

}

List接口

用来包含一组 有序有重复 的对象

List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素

List有两种主要的集合实现类:ArrayList(线性表)和LinkedList(链式表)

ArrayList与LinkedList的比较:

存储结构:

ArrayList是线性顺序存储

LinkedList对象间彼此串连起来的一个链表

操作性能:

ArrayList适合随机查询的场合

LinkedList元素的插入和删除操作性高

从功能上:LinkedList要多一些

import java.util.*;

public class TestList {

/**

* @param args

*/

public static void main(String[] args) {

/*

* 有序,可重复

*/

//线性表

List list = new ArrayList();

//链表

//List list = new LinkedList();

list.add("1");

list.add("2");

list.add("3");

list.add("4");

list.add("3");

System.out.println(list);

/*

* 遍历list

*/

//方法一(推荐 效率高)

Iterator it =list.iterator();

while(it.hasNext())

{

String str = (String)it.next();

System.out.println(str);

}

//方法二

for(int i = 0 ; i

{

String str = (String)list.get(i);

System.out.println(str);

}

/*

* linkedList用来实现队列和堆栈

*/

}

}

Map接口

Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象

Map是不同于Collection的另外一种集合接口

Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的

HashMap与TreeMap的比较

HashMap基于哈希表实现。TreeMap基于树实现。

HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用。

TreeMap没有调优选项,因为该树总处于平衡状态

HashMap性能优于TreeMap。

HashMap与Hashtable的比较

Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

import java.util.*;

public class TestMap {

/*

* map 无序,key不能重复

* key部分是用set实现的

*/

public static void main(String[] args) {

//key部分是用set实现的 hash技术 无序

Map m = new HashMap();

m.put(new Integer(1000), "zs");

m.put(new Integer(1001), "lisi");

m.put(new Integer(1001), "zhaosi");

System.out.println(m);

/*

* 使用场景1: 根据key找value

*/

String str = (String)m.get(new Integer(1000));

System.out.println(str);

/*

* 使用场景2: 遍历map

* 找到所有的Key

* 利用iterator迭代器遍历

*/

Set keys = m.keySet();

Iterator it = keys.iterator();

while(it.hasNext())

{

Integer temp = (Integer)it.next();

System.out.println(temp);

}

/*

* 使用场景3: 遍历map

* 找到所有value

*/

Collection values = m.values();

it = values.iterator();

while(it.hasNext())

{

String temp = (String)it.next();

System.out.println(temp);

}

/*

* 使用场景4: 遍历map

* 找到所有key-value对

*/

Set s = m.entrySet();

it = s.iterator();

while(it.hasNext())

{

Map.Entry entry = (Map.Entry)it.next();

Integer id = (Integer)entry.getKey();

String name = (String)entry.getValue();

System.out.println(id+"----"+name);

}

}

}

Iterator接口

迭代器,用来方便的实现对容器内的元素进行遍历操作。所有实现了Collection接口的集合类都有一个iterator( )方法,返回一个实现了Iterator接口的对象。Iterator对象实现了统一的一个用来遍历Collection中对象的方法。Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的功能。Iterator的功能上比较简单,使用中,只能单向移动

总结

Set内存放的元素不允许重复,List存放的元素有一定的顺序。

Map的应用主要在利用键/值对进行快速查询。

ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好 。

HashSet和TreeSet的区别在于集合内元素是否排序 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值