Java的集合可以分为两类,

第一类是以数组为代表,这类集合可以描述线性表类型的数据结构,以Collection为基类,其中自己用过或者了解的有

实现List接口的类:LinkedList,ArrayList,Vector,Stack...

实现Set接口的类:TreeSet,HashSet...

第二类是以Map为代表的“键值对”类型的数据结构,以Map为基类,其中有

HashMap,HashTable,Tree

第一类

Vector

Vector与数组相比,Vector对象可以很好的实现元素的插入和删除,也拥有动态增长特性

1.构造函数(4)

  • Vector()
  • Vector(<E> c)使用泛型(generic type)确定容纳对象的类型
  • Vector(int initialCapacity,int capacityIncrement)

  能为初始化的Vector对象分配长度为initialCapacity的容量,可以在必要的时候以capacityIncrement的速度自增长其容量空间

  • Vector(int initialCapacity)

2.常用方法

  • addElement(E obj)向Vector中添加元素

  通过这个方法可把obj对象添加到该Vector对象的尾部,同时Vector的size加1。

  • insertElementAt(E obj)在指定索引处添加元素

  通过这个方法,可以把obj对象添加到参数指定的index索引处,此后的Vector对象里的各内容自动向后移动一个单位

  setElement(E obj,int index)替换指定位置的元素

  • boolean removeElement(Object obj)删除Vector对象中的第一个obj对象,返回一个bool类型的值用来表示是否找到并删除指定对象
  • void removeElementAt(int index)删除指定位置的元素
  • void removeAllElements()删除Vector对象中的所有元素,size置为0
  • int size()获得Vector当前长度
 /*
*@author SimonKly E-mail:deGaulleKong@gmail.com
*@version:2017-2-25
*/
import java.util.Vector;
public class VectorTest {
public static void main(String[] args) {
// 实例一个Vector对象
Vector v=new Vector();
// 向Vector对象中添加元素
v.addElement(new Integer(1));
v.addElement("two");
v.addElement("Three");
// 向Vector对象指定位置插入
v.insertElementAt(0, 0);
// 替换指定位置的元素
v.setElementAt("four",3);
// 遍历Vector对象
System.out.print("element :");
for(int i=0;i<v.size();i++){
if(v.elementAt(i) instanceof Integer)//判断元素类型
System.out.print(" "+((Integer)v.elementAt(i)));
else
System.out.print(" "+(String)v.elementAt(i));
} System.out.println();
// 删除指定位置的元素
v.removeElementAt(3);
System.out.print("element :");
// 遍历验证
for(int i=0;i<v.size();i++){
if(v.elementAt(i) instanceof Integer)
System.out.print(" "+((Integer)v.elementAt(i)));
else
System.out.print(" "+(String)v.elementAt(i));
}
System.out.println();
// 删除所有元素
v.removeAllElements();
if(v.size()==0){
System.out.println("Cleared!");
}
}
}

Stack

Stack继承了Vector,Stack重用 了Vector的存储对象空间和访问线性表方法,而Stack先进后出的特性可以看作Vector的特例

1.构造函数

  • Stack()
  • Stack(<E s>)

2.常用方法

  • E push(E item)向堆栈中压入item,并将item对象返回
  • E peek()返回指定栈顶元素的类型
  • E pop()弹出栈顶元素
  • boolean empty()判断堆栈是否为空
 package $1;

 /**
*@author: SimonKly
*@E-mail:deGaulleKong@gmail.com
*@date: 2017年2月27日
*/ import java.util.Iterator;
import java.util.Stack; public class StackTest { public static void main(String[] args) {
Stack s=new Stack();
s.push("one");
s.push("two");
s.push("three");
Iterator iterator=s.iterator();
System.out.println("iterator:");
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("normal:");
for(int i=0;i<s.size();i++){
System.out.println(s.get(i));
}
System.out.println("pop");
while(!s.isEmpty()){
System.out.println(s.pop());
}
//由于继承了Vector则,不好用法则会Stack把当成Vector
s.addElement("badusage1");
s.addElement("badusage2");
s.addElement("badusage3");
for(int i=0;i<s.size();i++){
System.out.println(s.elementAt(i));
}
} }

List接口

Vector和Stack都实现了List接口

其中的方法

  • 插入

    void add(int index,E element)在索引号index后插入element元素

    boolean add(E o)直接插入到链表的最后

  • 删除

    E remove(int index)删除链表中指定的位置

    boolean remove(Object o)删除链表中第一个元素

  • 获取元素

    E get(int index)获取指定位置的元素

int size()统计有多少元素

int indexOf(Object obj)获取obj对象的索引位置

List<E>subList(int fromIndex,int to Index)截取链表,得到链表里的从fromindex开始到toIndex结束的子链表

void clear()清空链表

LinkedList实现了List

1.构造函数

LinkedList()

LinkedList(Collection c)

LinkedList(<E> c)

2.添加元素

void addFirst(E obj)//添加头元素

void addLast(E obj)//添加尾元素

3.获取元素

E getFirst()//获取第一个

E getLast()//获取最后一个

4.删除元素

E removeFirst()//删除第一个并返回第一个元素

E removeLast()//删除最后一个并返回最后一个元素

 package $1;

 /**
*@author: SimonKly
*@E-mail:degaullekong@gmail.com
*@date: 2017年2月27日
*/
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class LinkedListTest { public static void main(String[] args) {
// 使用泛型实例化一个LinkedList对象
List<String>ll=new LinkedList<String>();
// 向LinkedList中添加元素
ll.add("one");
ll.add("two");
ll.add("three");
// 不使用泛型实例化一个LinkedList对象
List l=new LinkedList();
l.add("first");
l.add("second");
l.add(3);//可以放入不同的数据类型
// 打印指定位置的元素
System.out.println("the index of 3:"+l.indexOf(3));
// 移除指定位置的元素
ll.remove(2);
// 使用Iterator对象遍历
Iterator iterator=ll.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
// 使用一般遍历方法遍历
for(int index=0;index<l.size();index++){
System.out.println(l.get(index));
}
}
}

不允许有重复元素的Set接口

接口中的方法:

1.添加元素:boolean add(E o)用到泛型,如果待插入的元素不在Set中则返回true,反之,返回false

2.删除指定元素:boolean remove(Object o)如果找到并成功删除则返回true ,反之,返回false

3.判断Set是否为空:boolean isEmpty()

4.返回Set大小的Size();

实现的类有HashSet,TreeSet(输出是有序)

第二类

HashTable

1.构造函数

HashTable()//初始容量为11,默认装载因子0.75

HashTable(int initialCapacity)//初始化容量,默认装载因子0.75

HashTable(int initialCapacity,float loadFactor)//初始化容量和装载因子

HashTable(<K,V>t)//使用泛型

2.添加键值

put(K key ,V value)

3.根据键值获取值

V get(Object key)

4.判断“键”和“值”是否存在

boolean containsKey(Object key)

boolean containsValue(Object value)

封装散列表数据结构的Map接口,实现的类:HashMap和TreeMap

其中方法:

1.V put(K key,V value)插入键值对,并返回value

2.V get(Object key)

3.boolean containsKey(Object key) boolean containsValue(Object value)判断是否存在键或者值

4.Set<Map.Entry<K,V>> entrySet()//返回键值对映射关系,用于遍历

 package $2;
/**
*@author: SimonKly
*@E-mail:degaullekong@gmail.com
*@date: 2017年2月27日
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap; public class MapTest {
static void prt(Map m)
{
Iterator i=m.keySet().iterator();
while(i.hasNext()){
Object o=i.next();
System.out.println("key="+o+",value="+m.get(o));
}
}
public static void main(String[] args) {
Map m; System.out.println("HashMap例子:");
m=new HashMap();
m.put(1, "one");
m.put(2, "two");
m.put(3, "three");
m.put(4, "four");
MapTest.prt(m); System.out.println("TreeMap例子:");
m=new TreeMap();
m.put(3, "three");
m.put(4,"four");
m.put(1, "one");
m.put(2, "two");
MapTest.prt(m);
// 使用Entry对象遍历Map
System.out.println("Entry对象遍历Map:");
HashMap<Integer,String> em=new HashMap<Integer,String>();
em.put(3, "three");
em.put(4,"four");
em.put(1, "one");
em.put(2, "two");
// 使用Entry对象遍历
for(Entry<Integer,String> entry:em.entrySet())
{
System.out.println("key="+entry.getKey()+",value="+entry.getValue());
}
}
}

Java数据结构----集合的更多相关文章

  1. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  2. Java.数据结构.集合体系详解

    I. 第一部分:常见数据结构 首先简单说下数据结构. 什么是数据结构?数据结构就是组织数据的方式. 常见的数据结构:栈,堆,树,图,数组,队列,链表. 这里主要介绍与java集合体系相关的栈.数组和链 ...

  3. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  4. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  5. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  6. Java数据结构之树和二叉树(2)

    从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...

  7. Java数据结构之树和二叉树

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  8. Java学习-集合(转)

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  9. java的集合框架之一

    java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...

随机推荐

  1. 小程序 ios 10.1.x 白屏问题

    遇到这个问题有点莫名其妙只有IOS10.1.x显示白屏 解决过程很坎坷,一开始以为是调试基础库的问题,改成最新的2.9.2版本. 用这个创建新的项目,把之前的项目内容放到新建项目内, 发现还是不行,后 ...

  2. python(列表推导式和生成器表达式)

    从母鸡下蛋的故事讲起 老母鸡 = ('鸡蛋%s'%i for i in range(10)) print(老母鸡) for 蛋 in 老母鸡: print(蛋) g = (i*i for i in r ...

  3. legend2---17、legend2里面怎么面向对象

    legend2---17.legend2里面怎么面向对象 一.总结 一句话总结: mvc本身挺优:本身mvc的开发模式,就算是面向过程下也还行,如果面向对象那就更加棒了 实体类无需属性:由于php的生 ...

  4. [转]DrawPrimitive 详解Direct3DDevice8

    Direct3DDevice8 函数 05-39  DrawPrimitive 详解 费了好大的劲,终于搞清楚 DirectX 3D 三维图像中 DrawPrimitive 的用法(自嘲:未必). D ...

  5. Linux用ifconfig设置IP、掩码、网关

    ifconfig eth0 ip netmask 255.255.255.0 route add default gw 网关

  6. networkComms 通信框架之 消息处理器

    经常做Tcp通信的朋友知道,客户端发送数据到服务器 或者 服务器发送消息到客户端,接收端都要有相对应的处理器来对消息进行处理. 这里有两个概念 需要进行区别 消息类型 实际的数据类型  这里指的是未被 ...

  7. http相应状态码大全

    100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议 200 OK 一切正常,对GET ...

  8. Sublime 代码段设置

    # Sublime 代码段 > 依次找到:Tools -> Developer -> New Snippet,默认代码段配置文件如下: <snippet><cont ...

  9. NtCallbackReturn是否导致了用户态栈的不平衡

    0:000> u ntdll!KiFastSystemCall ntdll!KiFastSystemCall: 7c92eb8b 8bd4 mov edx,esp 7c92eb8d 0f34 s ...

  10. git使用记录一:配置账户信息

    配置的级别 git config --gloabal 针对当前用户下所有的项目 设置 git config --local 针对当前工作区的项目来进行设置 git config --system 针对 ...