day_16Java集合类

 

 

掌握集合类接口的常用方法

掌握集合类接口的实现类

掌握迭代器的创建和使用

 

一、集合类的概述

 

java.util包中提供了一些集合类,这些集合类又为容器。

 

数组与集合类:

 

       数组:长度固定;用来存放基本类型的数据

       集合类:长度可变;用来存放对象的引用

 

常用的集合类:

        List、Set、Map

 

List集合和Set集合-->实现Collection<E>接口

 

常用集合的继承关系

 

HashMap(TreeMap)---> Map--->java.lang.Object

(HashSet/TreeSet--->set)/(ArrayList/LinkedList----->list)---->Collection--->java.lang.Object

 

 

二、集合类接口的方法

 

Collection接口是层次结构中的根接口。

构成Collection的单位-->元素

Collection接口不可直接使用,但该接口提供了添加、删除元素、管理数据的方法。

 

List Set实现了Collection接口,这些方法可以被List集合和Set集合是通用的。

 

2.1 List集合

 

List继承Collection接口,因此包含Collection中的所有方法。

又因为List是列表类型,所有List接口还提供了一些适合于自身的常用方法。

 

常用的方法:

void add(int index,E element)

在列表的指定位置插入指定元素(可选操作)。将当前处于该位置的元素(如果的话和所后续元素向右移动(在其索引中加 1)。

...查看api

 

List接口中适合于自身的方法都与索引有关。

由于List集合以线性方式存储对象,因此可以通过对象的索引来操作对象。 

 

方法:

add(int index, E element) 

          在列表的指定位置插入指定元素(可选操作)。

set(int index, E element) 

          用指定元素替换列表中指定位置的元素(可选操作)。

 

 

LinkedList是链式的集合--LinkedList底层是由双向循环链表实现,里面的数据在逻辑上的存储是连续的,连续自然也就有顺序了

 

Iterator使用JDK提供的迭代接口进行Java集合的迭代。

----- 在Java中Iterator为一个接口,它只提供了迭代了基本规则,在JDK中他是这样定义的:对 collection 进行迭代的迭代器。

 

2.1.2 代码案例

 

       创建集合对象,并向集合中添加元素,通过set()方法修改集合中元素,再通过add()方法向集合中添加元素,通过迭代器遍历集合元素。

 

package day16;

 

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

 

public class ListTest {

public static void main(String[] args) {

String a = "A",b = "B",c = "C",d = "D",e = "E";//定义要插入的集合的字符串对象

List<String> list = new LinkedList<String>();  //创建List集合

list.add(a);                                   //向集合中添加元素

list.add(d);

list.add(e);

@SuppressWarnings("unused")

Iterator<String> itr = list.iterator();       //创建集合的迭代器

System.out.print("修改之前的= ");

while(itr.hasNext()){                         //遍历集合中的元素

System.out.print(itr.next()+" ");         //循环获取集合中的元素

}

System.out.println();

 

/*E set(int index,

     E element)*/

list.set(1, b);

list.set(2, c);

Iterator itr2 = list.iterator();

while(itr2.hasNext()) {

System.out.print("通过set修改之后的集合 = "+itr2.next()+" ");

 

}

}

}

 

运行结果:

修改之前的= A 修改之前的= D 修改之前的= E 

通过set修改之后的集合 = A 通过set修改之后的集合 = B 通过set修改之后的集合 = C 

 

2.1.3

      创建List集合对象,通过add()方法向集合中添加元素,并将对象apple、b在集合中第一次与最后一次出现的索引位置输出。

 

代码案例:

 

package day16;

 

import java.util.ArrayList;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

 

public class ListTest {

public static void main(String[] args) {

 

/*创建List集合对象,通过add()方法向集合中添加元素,

并将对象apple、b在集合中第一次与最后一次出现的索引位置输出。*/

 

String a = "A",apple = "APPLE",b = "B",c = "C";

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

list.add(a);

list.add(apple);

list.add(b);

list.add(b);

list.add(c);

list.add(c);

list.add(apple);

list.add(b);

 

System.out.print(list);

/*Iterator itr = list.iterator();

System.out.println("输出集合中的元素:");

while(itr.hasNext()) {

System.out.print(itr.next()+"  ");

}*/

System.out.println();

 

System.out.println("apple的首次出现位置 = "+list.indexOf(apple));

System.out.println("apple的最后一次出现位置 = "+list.lastIndexOf(apple));

System.out.println("b的首次出现位置 = "+list.indexOf(b));

System.out.println("b的最后一次出现位置 = "+list.lastIndexOf(b));

}

}

 

运行结果:

[A, APPLE, B, B, C, C, APPLE, B]

apple的首次出现位置 = 1

apple的最后一次出现位置 = 6

b的首次出现位置 = 2

b的最后一次出现位置 = 7

 

 

java 集合ArrayList和LinkedList

 

1.ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦

            查询效率高,增删效率低 轻量级 线程不安全

2.LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引  但是缺点就是     查找非常麻烦 要丛第一个索引开始,线程安全    查询效率低,增删效率高 

 

 

3.set集合

 

   由于Set集合中不允许存在重复值,因此可以使用Set集合中的addAll()方法,将Collection集合添加到Set集合中并除掉重复的值。

 

创建一个List集合对象,并往List集合中添加元素。再创建一个Set集合,利用setAll()方法把List集合对象存入到Set集合中并除掉重复值,最后打印Set集合中的元素。

 

3.1代码案例:

package day16;

 

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

 

public class SetTest {

public static void main(String[] args) {

/*创建一个List集合对象,并往List集合中添加元素。

再创建一个Set集合,利用setAll()方法把List集合对象存入到Set集合中并除掉重复值,

最后打印Set集合中的元素。*/

 

String a = "A",b = "B",c = "C";

List<String> list = new ArrayList<String>();//创建List集合对象

list.add(a);                                //向集合中添加元素

list.add(b);

list.add(c);

list.add(a);

Set<String> s = new HashSet<String>();       //创建set集合对象

s.addAll(list);                              //将List集合对象添加到Set集合对象中

Iterator<String> i = s.iterator();           //创建Set集合迭代器

System.out.println("Set集合输出: ");

while(i.hasNext()) {

System.out.print(i.next());

}

}

}

 

运行结果:

Set集合输出: 

ABC

 

 

4.Map

 

4.1基础概念

 

Map接口提供了将键映射到值的对象。

一个映射不能包含重复的键;每个键最多只能映射到一个值。

 

       由于Map集合中的元素是通过key、value进行存储的,要获取集合中指定的key值或value值,

需要先通过相应的方法获取key集合或 value集合,再遍历key集合或value集合获取指定值。

 

代码案例:

 

向一个Map集合中插入数据并根据key的值打印集合中的元素。

 

4.2代码案例

 

package day16;

 

import java.util.HashMap;

import java.util.Map;

 

public class MapTest {

public static void main(String[] args) {

 

/*向一个Map集合中插入数据并根据key的值打印集合中的元素。*/

Map<String,String> map = new HashMap<String,String>();//创建Map集合

map.put("1", "apple");                                //像集合中添加对象

map.put("2", "pear");

map.put("3", "dooder");

for(int i = 1;i <= 3;i++){

System.out.println(map.get(""+i)); //输出对应位置的元素,(""+i)是将其转换为字符串

}

}

}

 

运行结果:

apple

pear

dooder

 

 

五、案例

           Map集合可以保存键值映射关系,所有省份信息可以保存为Map集合的键,而每个键可以保存对应的城市信息。

 

省市级的联动。

 

六、集合类接口的实现类

 

查看参考文档

 

七、迭代器

 

 

步骤

1.通过调用类集的iterator() 获得对类集的迭代方法

2.建立一个调用hasNext() 

 

3.在循环体内部next() 返回迭代的下一个元素,来获得每一个元素。

 

 

java.util.Iterator<E>

子接口:

  ListIterator<E>, 

 

方法:

hasNext() 如果仍元素可以迭代,则返回 true。

next()   返回迭代的下一个元素。

remove()   从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

          

 

总结

 

重点掌握集合的遍历、添加对象、删除对象的方法。

 

星期二, 十一月 17, 2015 18:59:32

 

你可能感兴趣的:(list,map,set,iterator())