【Java】容器

一、容器的概念和框架

概念:Java类库中提供的用于管理对象集的类

框架:

HashSet继承了set接口;ArrayList继承了List接口,LinkedList继承了List和Queue接口,这也展示出了Java中支持接口的多继承,一个接口继承多个父类接口时,通过任意一个父类接口的引用都可以指向子接口。

① Collection:

·列表(List):按照一定次序排列的对象集,对象可以重复

·集合(set):对象唯一,不可以重复

·队列(Queue):根据规则确定的对象顺序。

②Map(映射表):

一群成对的对象集,这些对象各自保持着“键-值”(key-value)对应关系。

允许使用一个对象来查找另一个对象(字典)。

1、List(列表接口)

Collection接口的子接口。

特点:实现该接口的类中的元素是有顺序的,可以重复的。

List容器中的元素都有一个对应的整数型的序号,用以记录元素在容器中的位置,可以根据序号取元素。

实现的类有:ArrayList(可变长的数组,随机存取)、LinkedList(双向链表,顺序存储)

可以通过一个父类对象引用指向一个子类对象。

容器内通过add函数加入的也是对象的引用。

//方法
Object get(int index);//返回下标index;
Object set(int index,Object element);
void add(int index,Object element);//增加元素;
Object remove(int index);//删除元素;
int indexOf(Object o);//返回第一个o的下标;
int lastIndexOf(Object o);//返回最后一个o的下标;

PS:Vector 是线程安全的,是同步的,但是运行效率低。

2、Queue(队列接口)

先进先出(FIFO),放入和取出的顺序相同。

主要子类:LinkList。

3、Set(集合接口)

实际上Set就是Collection,只是行为不同,元素不可重复。

实现的类:

HashSet:为快速查找设计的Set。存入HashSet的对象必须定义HashCode(存放位置),元素相同的条件为equals()返回true并且HashCode()的返回值相等。

TreeSet:保存次序的Set, 底层为二叉树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示

4、Map(映射表接口)

实现Map接口的类:存储“键-值”对。

Map中“键值对”通过键标示,键要唯一,不重复,即equals为false。

主要实现的类:HashMap(无序)、TreeMap(有序)、HashTable(与HashMap作用基本类似)

//定义声明
Map m1 = new HashMap();
Map m2 = new TreeMap();
//方法
Object put(Object key,Object value);
Object get(Object key);
Object remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object vlaue);
int size();
boolean isEmpty();
void putAll(Map t);
void clear();

HashMap与HashTable的区别:

HashTable的键值都不能为null,HashMap可以。

HashTable是同步的,线程安全的,效率低一点;HashMap不同步、效率高,适用单线程。

二、容器的遍历

1、Iterator(迭代器接口)

以统一方式对各种集合元素进行遍历、迭代的工具。

//方法
boolean hasnext();
object next();
void remove();
//实例1
Collection c = new HashSet();//通过父类接口引用指向子类;
c.add(new Student(1,"Tom",60));
c.add(new Student(2,"Peter",70));
c.add(new Student(3,"Bob",80));
Iterator i = c.iterator();//每一个Iterator对象必然对应着一个Collection对象(i->c);
while(i.hasNext())//判断下一个元素是否为空;
{
   Student s = (Student)i.next();//后移;
   System.out.println(s.getName());
}
//out:
Peter
Tom
Bob

//实例2
Collection c = new HashSet();
c.add(new Student(1,"Tom",60));
c.add(new Student(2,"Peter",70));
c.add(new Student(3,"Bob",80));
for(Iterator i = c.iterator();i.hasNext();)
{
   Student s = (Student)i.next();
   if(s.getNo()>2)
     i.remove();
}
System.out.println(c);

注意:

Iterator必然依附于Collection对象,若有一个Iterator对象,则必然有一个与之相关联的Collection对象。

三、常用类Collections类

Collections提供了基于List容器排序静态方法,可以直接调用。

//方法
void sort(List);//对List容器内元素排序
void shuffle(List);//对List容器内的对象进行随机排序
void reverse(List);//对List容器内的对象进行逆序排列
void copy(List dest,List src);
//把src中List容器内容拷贝到dest List容器
int binarySearch(List, Object);
//对顺序的List容器,用折半查找方法查找指定对象

//实例
List list1 = new LinkedList();
for(int i = 0; i <= 9; i++)
{
    list.add("a"+i);
}
System.out.println(list1);
Collections.shuffle(list1);
System.out.println(list1);
Collections.reverse(list1);
System.out.println(list1);
Collections.sort(list1);
System.out.println(list1);
System.out.println(Collections.binarySearch(list1,"a2"));
//out:
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
[a7, a1, a5, a4, a8, a0, a9, a2, a6, a3]
[a3, a6, a2, a9, a0, a8, a4, a5, a1, a7]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值