Java中使用集合存储对象操作 - Angel's Blog.

ing
 
 
软件开发,程序设计,前端设计
 
 
首页 > code > Java中使用集合存储对象操作

Java中使用集合存储对象操作

 

嘿嘿,这两天刚重新进入学习的状态,先更新一篇关于java中的集合存储对象的操作;

考虑到内容被容易混淆,下一次更新日志会增加对应此次日志内容中java泛型的使用。

1)使用集合框架的优势:

可以根据不同的情况,将数组扩大容量。

可以更方便的对数组中的元素进行查找,存储等操作。

2)java中的集合:

①:集合的接口:

java中集合的接口就是Collection。

其中,List也是接口(接口支持继承),继承Collection接口。

List是一个有序的集合(在数学中称为“线性表”),可以用重复的元素,可以通过索引访问、搜索其List中的元素。

②:集合的具体类:

实现“List”接口常用的类:ArrayList、LinkedList,可以包容包括null类型的所有类型对象。

③:算法:

集合框架中提供了类“Collections”,对集合的排序等多种算法。

3)List接口与ArrayList:

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

下面,通过ArrayList实现对对象的存储、删除等操作:

demo:

学生类(Student):

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);
	}
}

ArrayListName:

package collectionuse;

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("于", "零食");
		List mystuList = new ArrayList();
		mystuList.add(xiaogang);
		mystuList.add(xiaoming);
		mystuList.add(yu);
		System.out.println("共计" + mystuList.size() + "个同学");
		showInfo(mystuList);
	}
	public static void showInfo(List lists)
	{
		for (int i = 0; i < lists.size(); i++)
		{
			Student stu = (Student) lists.get(i);
			System.out.println("第" + (i + 1) +"位同学的名字:" + stu.getName());
		}
	}
}

ArrayList的数组可以变化,优势在于随机访问元素的效率较高。

List接口常用的方法:

返回类型 方法 补充说明
boolean add(Object o) 在列表的最后处添加元素,开始的位置索引从0开始。
int size() 返回列表中的元素个数
Object get(int index) 返回给定索引位置的元素(从集合中取出的元素为 Object类型,使用前需要先强制转换类型)
void add(int index , Object o) 指定位置添加元素(索引位置必须在0到列表中存有元素个数之间)
boolean contains(Object o) 判断列表中是否存在这个元素
boolean remove(Object o) 从列表中删除这个元素

4)List接口与LinkedList:

现在还是以学生类(Student)为例子,但是有需求变化了:

需求是这样:在集合的第一个位置添加一个对象,然后在集合最后一个位置添加一个对象。

显然,ArrayList很不高效(ArrayList每当集合中的元素被添加或者删除,整个数组都会移动[向前或向后]和影响)。

这里就需要到了LinkedList(链表):

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 lStudent = new LinkedList();
		lStudent.addFirst(shanshan);
		lStudent.addLast(xiaowang);
		lStudent.add(feifei);
		/**
		 * get第一个元素和最后一个元素,然后打印输出他们俩的名字。
		 */
		Student firstStudent = (Student)lStudent.getFirst();//获取第一个位置的元素,需要从Object强转到Student类型
		Student lastStudent = (Student)lStudent.getLast();//获取最后位置的那个元素.同上
		System.out.println(firstStudent.getName());//shanshan
		System.out.println(lastStudent.getName());//feifei
//		lStudent.removeFirst();
//		lStudent.removeLast();
//		System.out.println("学生总共" + lStudent.size() + "位。");
	}
}

其中,LinkedList不是必须在空间中连续,只要知道其中一个元素的位置,就可以找到它的前一个和后一个元素(位置)。

LinkedList的一些特殊方法:

返回类型 方法 说明
void addFirst(Object o) 在列表最前面(头部)添加元素
void addLast(Object o) 在列表的尾部添加元素
Object getFirst() 返回列表中的第一个元素
Object getLast() 返回列表中的最后一个元素
Object removeFirst() 删除&&返回列表中的第一个元素
Object removeLast() 删除&&返回列表中的最后一个元素

5)Map接口和HashMap:

同样地,以学生类为例子,需求再次变化:

这里通过学生的中文姓名来获取对应的学生的值。

所以就考虑到了HashMap,HashMap提供了key/value的存储操作,且要求key必须唯一。

*如果有重复的key,将会覆盖之前的key/value。

demo2:

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", "不河蟹的百家姓");
		/**
		 * 在这里使用到了HashMap的key/value对,
		 * 目的是通过引用key来映射到对应的value
		 */
		Map studentMap = new HashMap();
		studentMap.put("李四", lisi);
		studentMap.put("王超",wangchao);
		studentMap.put("张三", zhangsan);
		System.out.println("KeySet:" + studentMap.keySet());
		System.out.println("values:" + studentMap.values());
		System.out.println("key-value-collections:" + studentMap);
		/**
		 * 下面测试判断“某个key”是否存在:
		 */
		String testKey = "张三";
		if (studentMap.containsKey("张三"))
		{
			System.out.println("存在这个人:" + studentMap.get(testKey));
		}
		/**
		 * HashMap也支持remove()
		 */
		studentMap.remove(testKey);
		if (!(studentMap.containsKey("张三")))
		{
			System.out.println("不存在这个人");
		}
	}
}

HashMap的常用方法:

返回类型 方法 说明
Object put(Object key , Object value) key/value存储方式,且key必须唯一,否则当前覆盖之前的key/value
Set KeySet() 返回键的集合
Collection values() 返回值的集合
boolean containsKey(Object key) 是否存在由指定的key来映射到key/value,如果存在,返回true
Object get(Object key) 通过key返回其相关联的value,如果不存在这个key,则返回null
Object remove(Object key) 删除指定的key映射到的key/value
或者通过RSS 关注本站的更新 ^ O ^ 。” —  by  转载请注明:来自 Angel's Blog.
本文永久链接: http://www.0ee.com/2011/01/07/java-collection-list-of-control.html
 
分类: code标签: , ,
 
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
 

 
评论 (4) Trackbacks (0)
发表评论 Trackback
 
4 Comments Contributed by Visitors
  1.     Mucid 2011年1月8日11:26 1#

    不晓得学校教不教java,不过我也基本不听课,好想学python啊 ok

  2.     Angel 2011年1月8日13:36 2#

    @Mucid
    python很容易上手的,推荐你去学学,相信自学也应该没问题的,就看您喜欢不喜欢了,嘿嘿,我问过我们班的白老师,他说python是一门很高级的语言,比java高级。:)反正我感觉OOP要比过程更直接,更容易上手。

  3.     Mucid 2011年1月10日04:12 3#

    其实,我比较追求性能 ok

  4.     Angel 2011年1月10日05:32 4#

    @Mucid
    恩,我懂得:)

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 的评论内容.
 
 
  • 正在加载...