集合框架



一、为什么出现集合类?

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

二、集合类的特点

集合类存放于java.util包中。集合长度是可变的;它存放的都是不同类型的对象的引用,而非对象本身;集合中不可以存储基本的数据类型值。

集合类型主要有3种:set(集)、list(列表)和map(映射)

 

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

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

四、Collection的常见方法

1、添加

a) boolean  add (Object obj);

b) boolean  add(Collection coll);

2、删除

a) boolean  remove(Object obj);

b) boolean  removeAll(Collection  coll);

c) void clear();

3、判断

a) boolean  contains(object obj);

b) boolean  containsAll(Collection coll);

c) boolean   isEmpty()

4、获取

a) int size(); 获取集合中的长度

b) Iterator iterator(); 获取元素的方式:迭代器

5、其他

a) boolean  retainAll (Collection coll);取交集

b) Object[]  toArray();将集合转为数组

 

五、Iterator()方法实现原理



六、集合框架中的常用接口

1Collection接口有两个子接口:

List(列表),Set(集)

List:可存放重复元素,元素存取是有序的。

Set:不可以存放重复元素,元素存取是无序的。

2、List集合特有的迭代器,ListIteratoriterator的子接口。在迭代时,不可以通过集合对象的方法操作计划中的元素,因为会发生ConcurrentModificationException异常。所以在迭代时,只能使用迭代器的放过操作元素,可以是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用子接口ListIterator.。该接口只能通过List集合的ListIterator方法获取。

示例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ArrayListTest
{
public static void main(String[] args)
		{
			//演示列表迭代器
			ArrayList<String> al = new ArrayList<String>();
			//添加元素
			al.add("java01");
			al.add("java02");
			al.add("java03");
			System.out.println("原集合中的元素:"+al);
	
			ListIterator<String >li = al.listIterator();
			while (li.hasNext())
			{
				String str = (String) li.next();
				if (str.equals("java02"))
				{
					//li.add("java009");
					li.set("java002");
				}
			}
		System.out.println("改变后集合的元素:"+al);
<span style="white-space:pre">	</span>}
}

七、ArrayListLinkedList的区别

1、ArrayList:底层的数据结构使用的是数组结构,特点:查询速度快,但增删稍慢

2、LinkedList:底层使用的是链表数据结构,特点:增删速度很快,查询稍慢。

 

八、Set集合:不可以存放重复元素,元素存取是无序的。Set方法和Collection类似,主要看看其子类:

1、HashSet:底层数据结构为哈希表。HashSets通过元素的两个方法,hashCodeequals来完成,如果hashCode值相同才会判断equals是否为true,如果元素的hashCode值不同,则不会调用equals

注意:

A、正常开发中,自定义的对象要放到集合中一般都要重写hashCode()equals()方法。保证元素唯一性。

B、对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCodeequals方法。(而ArrayList判断元素存在或删除元素等操作,只依赖equals方法,这是因为数据结构的不同而不同。)

2、示例:

import java.util.HashSet;
import java.util.Iterator;

/**
 * 往hashSet集合中存入自定义对象(person)
 * 姓名和年龄相同为同一人,重复元素
  */
public class HashSetTest
{
	public static void main(String[] args)
	{
		HashSet<Person> hs = new HashSet<Person>();
		hs.add(new Person("a1", 12));
		hs.add(new Person("a2", 13));
		hs.add(new Person("a3", 14));
		//hs.add(new Person("a2", 13));
		
		System.out.println(hs.contains(new Person("a2", 13)));
		System.out.println(hs.remove(new Person("a2", 13)));
		
		
		for (Iterator it = hs.iterator(); it.hasNext();)
		{
			Person p = (Person) it.next();
			System.out.println(p.getName()+"::"+p.getAge());
		}
	}
	
}

class Person
{
	private String name;
	private int age;
	
	public Person(String name, int age)
	{
		super();
		this.name = name;
		this.age = age;
	}
	public int  hashCode()
	{
		//System.out.println(this.name +"......hashCode");
		return name.hashCode()+age*37;
	}
	
	public boolean equals(Object obj)
	{
		if (!(obj instanceof Person))
		{
			return false;
		}
		Person p = (Person)obj;
		//System.out.println(this.name + "...equals..."+ p.name);
		return (this.name).equals(p.name) && this.age == p.age;
	}
	public String getName()
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public int getAge()
	{
		return age;
	}
	public void setAge(int age)
	{
		this.age = age;
	}
	
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值