Java数据结构----集合
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数据结构----集合的更多相关文章
- (7)Java数据结构--集合map,set,list详解
MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...
- Java.数据结构.集合体系详解
I. 第一部分:常见数据结构 首先简单说下数据结构. 什么是数据结构?数据结构就是组织数据的方式. 常见的数据结构:栈,堆,树,图,数组,队列,链表. 这里主要介绍与java集合体系相关的栈.数组和链 ...
- 【Java】集合_学习笔记
一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- 谈谈Java的集合组件
让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...
- Java数据结构之树和二叉树(2)
从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...
- Java数据结构之树和二叉树
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java学习-集合(转)
在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...
- java的集合框架之一
java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...
随机推荐
- vue2 的 过渡(动画)效果
1.在过渡 效果的使用中 ,key属性需要注意 : 有相同父元素的子元素必须有独特的 key.重复的 key 会造成渲染错误. 参考官方说明: https://cn.vuejs.org/ ...
- LR快捷键
record optioning:录制选项——ctrl+f7 runtime setting : 运行时设置——F4 运行脚本——F5 参数列表:ctrl+L 注释:ctrl+shift+c 选中后 ...
- STemWin5.22移植笔记【转】
来自:http://www.openedv.com/posts/list/27697.htm STemWin5.22移植笔记 网上关于emwin的资料很少,我在移植的时候查了很多资料,对我一个感觉是好 ...
- WebBrowser是IE内置的浏览器控件
WebBrowser是IE内置的浏览器控件.WebBrowser是IE内置的浏览器控件.WebBrowser是IE内置的浏览器控件.重要的事情说三遍,原因是一开始使用的时候就在这踩了坑. WebBro ...
- XStream教程
XStream是一个简单的基于Java库,Java对象序列化到XML,反之亦然(即:可以轻易的将Java对象和xml文档相互转换). 特点 使用方便 - XStream的API提供了一个高层次外观,以 ...
- 常用numpy和pandas
常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准数学 ...
- js中继承的实现,原型链的知识点归纳,借用构造函数,组合继承(伪经典继承)
博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/10/31/js%e4%b8%ad%e7%bb%a7%e6%89%bf%e7%9a%84%e ...
- Notepad++中直接运行python
点击进入幕布视图浏览 https://mubu.com/doc/a8VGCUfqqw 一.使用Notepad++编辑python文件,并直接运行 1.用notepad++打开python文件.或者新建 ...
- 【Java】Java字符串转码
最近在开发项目中,偶尔遇到从页面上传到后台的中文数据,老是出现乱码的情况,但是对这个转码的过程又记不住,故此在此备份一下,希望对朋友们也有所帮助: String title=request.getPa ...
- SmartSql简介
0. Why 拥抱 跨平台 DotNet Core,是时候了. 高性能.高生产力,史上最轻量级的ORM.107kb 1. So SmartSql TargetFrameworks: .NETFrame ...