Java 集合框架

集合类


为什么出现集合类?


面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。


数组和集合类同是容器,有何不同?


数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。


集合类的特点


集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

 

 

import java.util.*;
		class  CollectionDemo
		{
			public static void main(string[] args)
			{
				method 2();
			}
			public static void method _2()
			{
				ArrayList all = new ArrayList();

				all.add("java01");
				all.add("java02");
				all.add("java03");
				all.add("java04");
				ArrayList al2 = new ArrayList();

				a12.add("java07");
				a12.add("java02");
				a12.add("java05");
				a12, add("java06");
				all.retainAl1(aI2);//去交集,all中只会保留和a12中相同的元素,
				sop("ai1:" + a11);
				sop("a12:" + a12);
			}
			pubilc static void sop(object obj)
			{
				system.out.println(obj);
			}
		}
}

 

 

 

Collection
l--List:元素是有序的,元素可以重复。因为该集合体系有索引、
l--set:元素是无序,元素不可以重复. 

 

 

List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。

add(index, element);
addAll(index,  Collection );
remove(index);

set(index, element);

get(index):
sub List(from,to);
listIterator ();

 

import java.util.*;
class ListDemo
{
	public static void sop(Object obj)
	{
		system.out.println(obj);
	}
	public static void main(string[] args)
	{
		ArrayList al = new ArrayList();
		//添加元素
		al, add("java01");
		al.add("java02");
		al.add("java03");

		sop("原集合是:" + a1);
		//在指定位置添加元素。
		al.add(1, "java09");
		//删除指定位置的元素。
			//al. remove(2);
			//修改元素。
			//al. set(2,"java007");
		//通过角标获取元素。
		sop("ɡ = t(i) :" + a1.get(1));
		sop(al);
		//获取所有元素。
		for (int x = 0; x < a1.size(); x++)
		{
			system.out.println("al(" + x + ")=" + al.get(x));
		}
		Iterator it = al.alliterator();
		while (it.hasNext())
		{
			sop("next:" + it.next());
		}
	}
}

 

1)HashSet类

  HashSet是Set集合最常用实现类,是其经典实现。HashSet是按照hash算法来存储元素的,因此具有很好的存取和查找性能。

  HashSet具有如下特点:

  ♦ 不能保证元素的顺序。

  ♦ HashSet不是线程同步的,如果多线程操作HashSet集合,则应通过代码来保证其同步。

  ♦ 集合元素值可以是null。

  HashSet存储原理如下:

  当向HashSet集合存储一个元素时,HashSet会调用该对象的hashCode()方法得到其hashCode值,然后根据hashCode值决定该对象的存储位置。HashSet集合判断两个元素相等的标准是(1)两个对象通过equals()方法比较返回true;(2)两个对象的hashCode()方法返回值相等。因此,如果(1)和(2)有一个不满足条件,则认为这两个对象不相等,可以添加成功。如果两个对象的hashCode()方法返回值相等,但是两个对象通过equals()方法比较返回false,HashSet会以链式结构将两个对象保存在同一位置,这将导致性能下降,因此在编码时应避免出现这种情况。

  HashSet查找原理如下:

  基于HashSet以上的存储原理,在查找元素时,HashSet先计算元素的HashCode值(也就是调用对象的hashCode方法的返回值),然后直接到hashCode值对应的位置去取出元素即可,这就是HashSet速度很快的原因。

   重写hashCode()方法的基本原则如下:

   ♦ 在程序运行过程中,同一个对象的hashCode()方法返回值应相同。

  ♦ 当两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法返回值应该相等。

  ♦ 对象中用作equals()方法比较标准的实例变量,都应该用于计算hashCode值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值