集合复习
来源:互联网 发布:二次元腐女软件 编辑:程序博客网 时间: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;
}
}
- 集合复习
- 集合复习
- 集合复习
- 复习集合
- 集合复习
- 集合复习
- 集合复习
- 集合框架复习
- JAVA复习之集合~~
- java集合复习转载
- 复习集合的文章
- Java集合框架复习
- 集合复习,深入理解
- Set 集合复习
- List集合基础复习
- C#复习之集合
- 集合复习(一)
- 集合复习(二)
- 等你,执手渡流年(七夕)
- platform_driver平台驱动注册和注销过程
- 数学公式——两点间的距离
- 「离散数学」 打印任意命题公示的真值表和主范式
- 简单的单元测试
- 集合复习
- 判断类是否实现了某方法 —— respondsToSelector
- 注解
- 创建 linux 内核 man 手册
- 紫薇花开的季节(二)
- 使用 jquery 的 form 插件上传文件 实验
- C++ 对象的内存布局(上)
- 利用seq_file在proc下添加文件
- 如果不是异地