集合复习

来源:互联网 发布:二次元腐女软件 编辑:程序博客网 时间:2024/06/04 17:47

第十章  集合复习

Collection -----Set:无序的,不可以重复  HashSet

           |---List :有序,可以重复    ArrayList  LinkedList Vector

Map---HashMap

      HashTable--Properties

Java用于集合类来容纳不同种类的数据,这种容纳是建立在未知的基础上,即java要用有限种类的集合类,来容纳无限种类的数据对象。

分类:java的集合类分为三类:集、列表和映射

1、集(set):和数学上的“集合”概念对应,是最简单的一种集合。

(1)set集合中不区分元素的顺序,因此也就不记录元素的加入顺序

(2)Set集合中不包含重复元素,即任意的两个元素e1和e2都有e1.qeual(e2)=false,并且最多有一个null元素。

2、List列表:list列表区分元素的顺序,即list列表能够精确的控制每个元素插入的位置,用户能够使用索引(元素在List中的位置)

来访问List中的元素。和Set集合不同,List允许包含重复元素。

3、映射:保存的是“键-值”对信息,即Map中存储的每个元素都包括起标识作用的“键”和该元素的“值”两部分,查找数据时需要提供相应的“键”。才能查找到该“键”所映射的“值”。因此,Map集合中不能包含重复的“键”,并且每个“键”最多只能映射一个值。

4、注意:java SDK不提供货直接继承自Collection的类,Java SDK提供的类都是继承自Collection的子接口。Collection接口有多个子接口,其中最重要的两个java.util.Set和java.util.List分别描述集Set和列表List。

5、列表的相应方法:

(1)void add

(2)int size

(3)int indexOf

(4)List<E>subList

(5)void clear()

 顺序访问的典范——数组类

     数组就是最常见的线性表。定义和使用数组的动作是通过引用来实现的(即通过new关键字返回一个新创建数组的引用)并可通过数组的引用,执行对数组元素的访问操作。

例10.1编写程序展示如何初始化数组、访问数组对象。

注意:数组,乃至后文描述的各种集合类型,都是一种可以保存数据以及对象的“容器”。

  数组对象的局限性

  数组无法更好地满足动态增长这个需求。

  数组中元素一旦被确定,向它们中间插入或删除元素的工作需要耗费较大的资源。

 先进后出的Stack类
Stack也是属于线性表类型的数据结构。

特点: “后进先出”(Last In First Out)类型的容器,即最后一个被“压(push)”进堆栈中的对象,会被第一个“弹(pop)”出来。

构造方法

Stack() :用于创建支持“后进先出”访问方式的对象
例:Stack st=newStack();
       Stack <String> st = newStack();

 其他方法

 E peek() 返回栈顶元素,但没有弹出栈顶元素

 E pop() 弹出栈顶元素,并返回其中的对象。

 E push(E item) 向堆栈顶端压入item对象,同时将item对象返回。

 boolean empty() 判断堆栈是否为空,如果该堆栈为空,返回true,反之返回false。

注意:由于Stack继承了Vector类,所以以下语句从语法上来讲,不会有问题。但却破坏了堆栈“后进先出”的特性,所以,不推荐使用。

 //出去ArrayList中的重复元素

package com.hbsi.genertic;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class Demo3 {

/**

 * @param args

 */

public static void main(String[] args) {

// TODO Auto-generated method stub

/*List list=new ArrayList();

list.add("aa");

list.add("bb");

list.add("cc");

list.add("aa");

//System.out.println(list);

list=listTest(list);

System.out.println(list);*/

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

list.add(new Person("aa",21));

list.add(new Person("bb",28));

list.add(new Person("aa",21));

list.add(new Person("cc",20));

list=listTest(list);

System.out.println(list);

}

public static List<Object> listTest(List<Object> list){

//创建一个新集合

List<Object> newList=new ArrayList<Object>();

//对旧集合进行遍历

Iterator<Object> it=list.iterator();

while(it.hasNext()){

Object obj=it.next();

if(!(newList.contains(obj))){

newList.add(obj);

}

}

return newList;

}

}

/*每个学生有自己的姓名和年龄

  每个学生都有自己的籍贯,籍贯是String类型

  学生和籍贯之间存在映射关系

  映射关系用Map表示

  键:Student

  值:籍贯*/

package com.hbsi.genertic;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

public class Demo4 {

/**

 * @param args

 */

public static void main(String[] args) {

// TODO Auto-generated method stub

HashMap<Person,String>hm=new HashMap<Person,String>();

hm.put(new Person("aa",23),"保定");

hm.put(new Person("bb",24),"廊坊");

hm.put(new Person("cc",26),"唐山");

Set<Map.Entry<Person,String>> set=hm.entrySet();

Iterator<Map.Entry<Person,String>>it=set.iterator();

while(it.hasNext()){

Map.Entry<Person,String>entry=it.next();

String str=entry.getKey().getName();

Integer in=entry.getKey().getAge();

String str2=entry.getValue();

System.out.println(str+"..."+in+"..."+str2);

}

}

}

package com.hbsi.genertic;

public class Person {

private String name;

private int age;

public Person(String name,int age){

this.name=name;

this.age=age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString(){

return name+"...."+age;

}

@Override

public boolean equals(Object obj){

Person p=(Person)obj;

return this.name.equals(p.name) && this.age==p.age;

}

}

原创粉丝点击