Java 数据结构
(1) Collection 接口是用于容纳元素的容器。而Iterator接口是用于遍历集合中每一个元素的数据结构,因此Iterator也被称为迭代器。
Iterator 通用方法简介
|
方法 |
简介 |
|
Boolean hasNext() |
可以判断是否到了集合的末尾,如果到集合的末尾,就返回false |
|
Object next() |
返回当前指针跳过的那个元素 |
|
Void remove() |
从集合中删除1个元素 |
代码如下:
public void test1_array() { Collection c = new ArrayList(); c.add("张三"); c.add("李四"); c.add("王五"); c.add("张三"); // for (Iterator it=c.iterator();it.hasNext();) { String s=(String)it.next(); System.out.println(s); } }
(2) List接口
List接口继承了Collection接口以定义一个允许重复项的有序集合,该接口不但能够对列表的一部分进行处理,还添加了对指定位置元素进行操作的功能。
public
void test2_array() { List<Integer> lst=new
ArrayList<Integer>(); BufferedReader br=new
BufferedReader(new
InputStreamReader(System.in)); while
(true) { System.out.println("请输入一个整数(按下q键)"); String input=null; try { input=br.readLine();
} catch
(IOException e) { e.printStackTrace(); } if
(input.equals("q")) { break; } lst.add(new
Integer(input)); } Integer[] arr=new
Integer[lst.size()]; arr=lst.toArray(arr); System.out.println(Arrays.toString(arr));
} |
Java的集合框架 中有2种常用的List实现类:ArrayList和LinkedList。如果随机访问可以使用ArrayList,如果顺序访问列表元素,使用LinkedList实现。
(3) Map接口
Map接口用于维护键-值对(key-value),按其定义,Map接口描述了从不重复的键到值的映射。
public
void test3_array() { Map map1=new
TreeMap(); //新增 map1.put("1",
"贾海天"); map1.put("2",
"李涛"); //key值重复,取最后的取值 map1.put("3",
"钟亮"); map1.put("3",
"吉连兵"); //遍历查询 Set set1=map1.keySet(); Iterator it1=set1.iterator();
while
(it1.hasNext()) { String key=(String)it1.next(); String value=(String)map1.get(key); System.out.println("key:="+key+",value :="+value); } //删除 map1.remove("1"); map1.remove("4"); System.out.println("删除以后的结果:"); Set entitySet=map1.entrySet(); Iterator it2=entitySet.iterator(); while
(it2.hasNext()) { Entry entry1=(Entry)it2.next(); System.out.println("key:"+entry1.getKey()+",value:"+entry1.getValue()); } } |
Map常规的实现类有:HashMap 和TreeMap。在Map中插入、删除和定位元素。
(4) Set 接口
Set接口继承了Collection接口,并且不允许集合中存在重复项,每个具体的Set实现类依赖添加的对象的equals()方法来检查唯一性。
Set接口的主要实现类:HashMap 和TreeMap。
代码如下:
class
Person implements
Comparable{ private
int wage; private
String name; Person (int
w,String n) { this.wage=w; this.name=n; } public
void setWage(int
wage) { this.wage=wage; } public
int getWage() { return
this.wage; } public
void setName(String name) { this.name=name; } public
String getName() { return
this.name; }
@Override public
int compareTo(Object obj) { Person p=(Person)obj; if
(this.getWage()<p.getWage()) { return
-1; } else { if
(this.getWage()==p.getWage()) { return
0; } } return
1; }
} |
调用Person class代码
public
void test4_array() { TreeSet mytree=new
TreeSet(); Person per1,per2,per3,per4,per5; per1=new
Person(900,"贾海天"); per2=new
Person(800,"李涛"); per3=new
Person(600,"钟亮"); //per4=new Person(600,"吉连兵");
//per5=new Person(600,"吉连兵"); mytree.add(per1); mytree.add(per2); mytree.add(per3); //mytree.add(per4); //mytree.add(per5); Iterator it=mytree.iterator();
while
(it.hasNext()) { Person per=(Person)it.next(); System.out.println("员工:"+per.getName()+",工资:"+per.getWage()); }
} |
(5) 泛型
泛型的本质就是参数化类型,也就是将操作的数据类型指定为1个参数,java 语言引入泛型的好处是提高了程序的安全性。
定义一个泛型,使其可存放各种数据类型,并加以验证。代码如下:
public
class Gen<T> { private
T object1; public
Gen(T object1) { this.object1=object1; } public
T getObject() { return
this.object1; } public
void setObject(T object1) { this.object1=object1; } public
void showType() { System.out.println("T的实际类型是:"+object1.getClass().getName()); }} |
调用代码:
public
void test5_array() { //泛型 Gen<Integer> intOb=new
Gen<Integer>(123); intOb.showType(); int
i=intOb.getObject(); System.out.println("value="+i); Gen<String> strOb=new
Gen<String> ("Hello 贾海天"); strOb.showType(); String s=strOb.getObject(); System.out.println("value="+s); } |
执行结果是:
T的实际类型是:java.lang.Integer
value=123
T的实际类型是:java.lang.String
value=Hello 贾海天


4142

被折叠的 条评论
为什么被折叠?



