您的位置:首页 > 理论基础 > 数据结构算法

java 数据结构

2015-09-24 09:42 387 查看
Java 数据结构

(1) Collection 接口是用于容纳元素的容器。而Iterator接口是用于遍历集合中每一个元素的数据结构,因此Iterator也被称为迭代器。

Iterator 通用方法简介



代码如下:

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 小李
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: