Java中使用集合相关之泛型的使用 - Angel's Blog.

ing
 
 
软件开发,程序设计,前端设计
 
 
首页 > code > Java中使用集合相关之泛型的使用

Java中使用集合相关之泛型的使用

 

在Java SE5中,引入了新的特征“<T>泛型”,我个人认为应该是受到C#的泛型太好用了(本人之前学过一些c#的内容),于是在新的版本中引入了它;

泛型在c#中的优势很明显:

访问集合元素的时候无须强行的对类型转换;

对添加的元素类型进行约束。

同样也在java SE5以后也体现了出来。

1)ArrayList<T>泛型:

下面简单地来看java中使用泛型(需要java SE5的支持):

还是以上次集合的demo,写一个学生类Student,属性有名字和爱好,附加一个带有参数的构造方法;然后再重写一个toString()方法。

然后通过ArrayList泛型,同样效果实现对对象的存储、删除等操作:

demo:

 

package collectionuse;

public class Student
{
	public Student()
	{
		// TODO Auto-generated constructor stub
	}
	/**
	 * 构造方法
	 * @param name
	 * @param hobby
	 */
	public Student(String name , String hobby)
	{
		// TODO Auto-generated constructor stub
		setHobby(hobby);
		setName(name);
	}
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getHobby() {
		return hobby;
	}
	public void setHobby(String hobby) {
		this.hobby = hobby;
	}
	private String hobby;
	/**
	 * HashMap
	 * 重写toString() 方法,让其打印新的学生信息(姓名和爱好)。
	 */
	public String toString()
	{
		return ("姓名" + name +",爱好" + hobby);
	}
}

ArrayList<T>:

import java.util.*;

public class ArrayListName
{
	public static void main(String[] args)
	{
		Student xiaoming = new Student("小明", "reading book");
		Student xiaogang = new Student("小刚", "喝水");
		Student yu = new Student("于", "零食");
		ArrayList<Student> stuArray = new ArrayList<Student>();
		stuArray.add(xiaogang);
		stuArray.add(xiaoming);
		for (Student stuForeach : stuArray)
		{
			System.out.println(stuForeach.getName());
		}
	}
}

在这里,使用ArrayList<T>进行元素的添加、访问,不需要进行强制的转换,而且对于添加的各个引用的元素对其类型的限制,确保所添加的内容安全。

ArrayList<T>常用方法和ArrayList类似(请看前一篇日志的表格罗列)。

2)LinkedList<T>泛型的使用:

和之前的日志内容要求相同,以学生类(Student)为例子,但是有需求变化:

在集合的第一个位置添加一个对象,然后在集合最后一个位置添加一个对象。

这里使用到了LinkedList<T>:

demo1:

import java.util.*;

public class LinkedListName
{
	public static void main(String[] args)
	{
		Student xiaowang = new Student("小王", "numb..");
		Student shanshan = new Student("山山", "taobaoid");
		Student feifei = new Student("飞", "flyPig");
		/**
		 * LinkedList的泛型
		 */
		LinkedList<Student> llist = new LinkedList<Student>();
		llist.addFirst(feifei);
		llist.addLast(xiaowang);
		llist.add(shanshan);
		Student friStudent = llist.getFirst();
		Student laStudent = llist.getLast();
		System.out.println("no-1:" + friStudent.getName());
		System.out.println("no-2:" + laStudent.getName());

		//同样也支持removeFirst()操作.
		llist.removeFirst();
		llist.removeLast();
	}
}

在这里使用LinkedList<T>,也一样无须强制类型转换(拆箱)的操作;

LinkedList<T>常用方法和LinkedList类似(请看前一篇日志的相关表格罗列)。

3)HashMap<T>、HashTable<T>的使用:

import java.util.*;

public class HashMapName
{
	public static void main(String[] args)
	{
		Student zhangsan = new Student("zhangsan", "CF?");
		Student wangchao = new Student("wangchao", "wow");
		Student lisi = new Student("lisi", "不河蟹的百家姓");
		/**
		 * 泛型版本的Hash(Hashtable , HashMap)
		 * 在下面
		 */
		//hashTable
		Hashtable<String, Student> mytable = new Hashtable<String, Student>();
		mytable.put("zhangxiaosan", zhangsan);
		System.out.println("集合元素长度:" + mytable.size());
		System.out.println("KeySet:" + mytable.keySet());
		System.out.println("values:" + mytable.values());
		System.out.println("key/value-collections:" + mytable);
		System.out.println("========高贵的分割线=========");
		//hashMap
		HashMap<String , Student> myhash = new HashMap<String, Student>();
		myhash.put("xiaosi", lisi);
		System.out.println("集合元素长度:" + myhash.size());
		System.out.println("KeySet:" + myhash.keySet());
		System.out.println("values:" + myhash.values());
		System.out.println("key/value-collections:" + myhash);
		System.out.println("========高贵的分割线=========");
		//Dictionary<k , v>下不能使用keySet()和values(),替换成hashtable即可。
		Dictionary<String, Student> mydic = new Hashtable<String, Student>();
		mydic.put("ha", wangchao);
		System.out.println("集合元素长度:" + mydic.size());
		System.out.println("key/value-collections:" + mydic);
	}
}

HashMap<T>、HashTable<T>的常用方法同前一篇日志的HashMap。

在集合中对元素的控制,使用泛型的优势是显而易见的,无论是在添加对象引用还是进行访问元素。

或者通过RSS 关注本站的更新 ^ O ^ 。” —  by  转载请注明:来自 Angel's Blog.
本文永久链接: http://www.0ee.com/2011/01/08/java-use-generic-to-control-collection-list.html
 
分类: code标签: , ,
 
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
 

 
评论 (4) Trackbacks (0)
发表评论 Trackback
 
4 Comments Contributed by Visitors
  1.     爪印 2011年1月8日14:34 1#

    代码真很复杂看不太懂

  2.     Angel 2011年1月9日10:47 2#

    @爪印
    哈哈,多接触就懂了。

  3.     学夫子 2011年1月11日09:26 3#

    纯支持,看着这些就头疼的,你真有心,写这么多东西出来

  4.     Angel 2011年1月11日14:07 4#

    @学夫子
    嘿嘿,其实这个在c#中学过了,就是按照c#的方式揣摩一下;
    学习就是一个积累的过程,滴水穿石。:)

Leave Comments Here...

:) :-D :( :-o 8-O :-? 8) lol :-x :-P oops cry evil twisted wink ? idea :-| arrow mrgreen roll !

(required)

(required)

网址随您("http://"可以省略)

(Ctrl+Enter)

  • 本站不会泄露您的 Email 地址, 敬请放心.
  • 本站已开启缓存, 请不要重复提交评论.
  • 请注意: 带有 《广告(链)、不健康、或者 产品名字》 的评论一律视为spam.
  • 支持常用 HTML 标签调用, 插入 HTML 标签需注意: < == &lt;> == &gt;.
  • 仅当某人针对您的评论做出回应时, 您才会收到由本站发出的邮件通知.
  • 如您希望以相同方式通知某位网友, 请点击  按钮进行回复.
  • 允许在评论中使用如下代码: 
    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> 
    <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> 
    .
  • 鼠标悬浮到评论中的 @someone 区域即可自动显示 someone 的评论内容.
 
 
  • 正在加载...