Java基础——常用对象API(三)——集合

版权声明:Dirichlet_zju https://blog.csdn.net/Dirichlet_zju/article/details/86076758

一、集合框架

1.概述

面向对象的语言会产生很多对象,为了方便存储,就要有容器来存储这些对象。区别于数组,集合是可变长度的

注意:集合中不可以存储基本数据类型。

简单总结一下,集合与数组的区别在于长度可变、不能存储基本数据类型。

2.体系&共性功能

Collection是层次结构中的根接口,即集合框架的顶层。我们先来了解它有哪些功能,就能了解他的实现有哪些基本功能。

2.1.添加

boolean add(E e);
boolean addAll(Collection<? extends E> c);

2.2.删除

boolean remove(object obj);
boolean removeAll(Collection coll);//将两个集合中的相同元素从调用removeAll的集合中删除

void clear();//清空

2.3.判断

boolean contains(object obj);
boolean containsAll(Collection coll);//判断是否包含集合
boolean isEmpty();//判断是否为空

2.4.获取

int size();//集合中的个数
Interator<E> iterator();//返回元素上进行迭代的迭代器,就是取出元素的方式,返回迭代器对象

2.5.其他

boolean retainAll(Collection<E> coll);//取交集
Object[] toArray();//返回包含此 collection 中所有元素的数组。

3.迭代器的使用iterator

3.1.使用

查API:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

3.2.原理

该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。
    
Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
其实就是抓娃娃游戏机中的夹子!

扫描二维码关注公众号,回复: 4849616 查看本文章

二、List和Set(列表和集合)

1.特点

  • List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复
  • Set:元素不能重复,无序

2.List常见方法

List:特有的常见方法:有一个共性特点就是都可以操作角标。

2.1.添加

void add(int index, T element);
void add(int index, Collection coll);

2.2.删除

Object remove(index);//注意可以返回被删除对象

2.3.修改

Object set(index,element);

2.4.获取

Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);

2.5.listIterator接口

List list;
//通用方法
Iterator it = list.iterator();
//特有方法,只有List有
list.get(x);//int x,返回List中的对象类型

例子:

public static void main(String[] args) {

		List list = new ArrayList();
//		show(list);
		
		
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		
		System.out.println("list:"+list);
		ListIterator it = list.listIterator();//获取列表迭代器对象
		//它可以实现在迭代过程中完成对元素的增删改查。
		//注意:只有list集合具备该迭代功能.
		
		
		while(it.hasNext()){
			
			Object obj = it.next();
			
			if(obj.equals("abc2")){
				it.set("abc9");
			}
		}
		System.out.println("hasNext:"+it.hasNext());
		System.out.println("hasPrevious:"+it.hasPrevious());
		
		
		while(it.hasPrevious()){
			System.out.println("previous:"+it.previous());
		}
		System.out.println("list:"+list);
	}

3.List 常用子类的特点

  • Vector:内部是数组数据结构,是同步的增删,查询都很慢
  • ArrayList:内 部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
  • LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

4.Set无序、可重复

4.1.HashSet

哈希冲突解决办法:1.顺延;2.串联

4.2.LinkedHashSet<E>

具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。

特点:链表存储,有序;不可重复。

4.3.TreeSet

使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

特点:可以对set元素进行排序,

TreeSet集合第一种排序方式:让元素自身具备比较功能,重写被比较对象的CompareTo方法(需要实现Comparable接口)

TreeSet集合第二种排序方式:让TreeSet具备比较能力(Comparator怎么写?

class ComparatorDemo implements Comparator<StringToInt>{
    @Override
    public int compare(StringToInt o1, StringToInt o2) {

        return o1.comp-o2.comp;
    }
}
//实现
ComparatorDemo<StringToInt> comp = new CompparatorDemo<StringToInt>();
TreeSet ts = new TreeSet(Comp);

猜你喜欢

转载自blog.csdn.net/Dirichlet_zju/article/details/86076758