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 賈海天
