集合框架-List与Set

所有的集合框架并不存放真正的对象,而是持有对象的引用
List与Set都继承自Collection
List的实现类:ArrayList,LinkList,Vector
Set的实现类:HashSet,LinkedHashSet,SortSet(接口),TreeSet(实现SortSet).
首先介绍一下Ordered与Sorted接口的区别
Ordered:按照某种后天规定的顺序遍历其中的所有元素,可以想成队列,按照存入顺序排队。
Sorted:按照天然的顺序进行排序,不受外界影响。即使你输入的顺序是乱序,存储中都会以天然的顺序排序。

列表 List

实现该接口的类均属于Ordered类型。按照索引先后顺序排列的。列表中的索引从0开始
常用方法:

boolean add(Object o)//将O添加到列表的尾部,成功返回true,反之则反

void add(int index,Object o)//在该索引位置添加O,索引原来对象依次后移

boolean addAll(Collection c)//将C列表中的所有元素添加到列表的尾部,成功返回true

boolean addAll(int index,Collection)//将C列表中的元素添加到列表索引位置index处,然后列表中原来的元素一次后移

boolean contains(Object o)//检查列表中是否包含元素O,有返回true

boolean containsAll(Collection c)//测试列表中是否包含列表c中所有元素,有返回true

void clear()//该方法移除列表中所有元素

Object get(int index)//返回列表索引为index处的元素\

int indexOf(Object o)//返回列表中O的第一次出现的索引位置,不存在返回负数

int lastIndexOf(Object o)//返回列表中O最后一次出现的索引位置,不存在返回负数

boolean isEmpty()//判断列表是否为空,空返回true

Object remove(int index)//移除索引位置为index处的元素,并且返回出来,后面的元素依次前移

boolean removeAll(Collection c)//移除测试列表中在C列表中存在的元素,如果移除返回true

boolean retainAll(Collection c)//保留测试列表中在C中存在的元素,其他的全部移除,做一次交集,若有元素移除返回true

Object set(int index,Object o)//将索引为index的元素替代为O,返回被替代的元素
List subList(int fromIndex,int toIndex)//返回一个新的列表,列表中的元素索引为测试列表下标中的[fromIndex,toIndex),左闭右开

int size()//返回列表的元素数

Object[] toArray()//将列表转换为对象数组

//列表转换为数组,这个不是列表中的方法
public static List asList(T a)
//使用实例
String[] s ={"zhangsan","lisi","wangwu"} 
List l = Arrays.asList(s);

ArrayList:内部实现依赖数组,对元素的随机访问性能很好,但是如果有大量的删除,插入操作时并不合适。
构造方法:

public ArrayList()//构造一个空的,默认大小是10

public ArrayList(int initialCapacity)//同样是空的,初始容量是initialCapacity

 public ArrayList(Collectio c)//将列表c中的元素初始化给新建的列表。

LinkedList:依靠双链表实现的,与ArrayList优缺点刚好相反
构造方法:

public LinkedList()//构造空的对象
public LinkedList(Collection c)//将列表C中的元素初始化赋值给新建的列表

Vector:性能与ArrayList相似,但是它是同步的,多线程同步访问的时候根据需求可以采用,但是会降低性能。

Set

List中可以存在重复的值,而Set中不允许重复值出现。
List中元素的顺序是元素的添加顺序,Set的元素没有顺序。
常用方法:与ArrayList类似,但是凡与index相关的都没有,因为它是无序存放的,所以没有索引

HashSet

既不是Ordered也不是Sorted,元素在其中的存放是完全无序的,HashSet存储对象引用的是按照哈希策略实现的,可以向其中添加null值,但是只能一次.
在存储自定义的类的对象的时候,要复写public int hashCode()与public boolean equals()方法,保证存储的数据唯一性。
构造函数

public HashSet()//空的HashSet对象,初始容量是16

public HashSet(int initialCapacity)//空的HashSet对象,初始容量是initialCapacity

public HashSet(Collection c)//将列表C中的元素初始化给新建的HashSet

LinkedHashSet
是Ordered的,采用双链表实现,元素的存储顺序是元素的插入顺序,其他与HashSet相同。构造函数也是类似,不过多介绍。

SortedSet
继承Set,不但具有Set的所有方法,而且时一个Sorted类型的Set。实现该接口的类将按照元素天然顺序自动排序,不管插入顺序,最终都会按照天然顺序。
常用方法

Object first()//返回SortedSet中的第一个元素

Object last()//返回SortedSet中的最后一个元素

SortedSet headSet(Object toElement)//返回一个小于指定元素的并且不包含该元素的SortedSet 

SortedSet tailSet(Object fromElement)//返回一个大于指定元素并且包含该元素的SortedSet 

SortedSet  subSet(Object fromElement, Object toElement)//返回一个包含起始元素到不包含结束元素的SortedSet 

TreeSet
实现SortedSet 接口,保持天然顺序存储
TreeSet没有采用哈希存储策略,因此不会调用hashcode()方法,但是同样不能有重复元素,采用compareTo方法替代equals方法。
TreeSet存储方式按照红黑树的结构进行存储,所以插入新的元素时不会与所有的元素进行比较
存储自定义类的对象时,为了保证有序,必须复写public int compareTo(Object o)方法。
自定义比较器,实现不同的排序方式

class a implements Comparator{
    public int compare(Object o1,Object o2){
        Student s1 = (Student)o1;
        Student s2 = (Student)o2;
        return s1.age-s2.age;//按学生年龄排序
    }
}
main(){
    TreeSet ts = new TreeSet(new a());
}

构造函数

public TreeSet()//构造一个空的TreeSet对象

public TreeSet(SortedSet S)//构造一个元素以S中元素为初始内容的TreeSet对象

public TreeSet(Collection c)//构造一个元素以c中元素为初始内容的TreeSet对象

public TreeSet(Comparator c)参数c作为比较器,构造具有比较器的空TreeSet对象

集合的遍历

Iterator
对于List来说,可以利用元素的索引进行遍历,然而Set是没有的,此时需要迭代器实现遍历,所有实现Collection的类都有一个名称为iterator的方法来获取迭代器
获取迭代器方法

Collection cset = new TreeSet();
Collection clist = new ArrayList();

Iterator i1 = cset.iterator();
Iterator i2 = clist.iterator();

常用方法

boolean hasNext()//测试集合中是否还有没有遍历的元素,存在返回true

Object next()//该方法返回下一个将要遍历的元素,通常与hasNext()连用,返回的对象是Object类型的引用,取出时需要自行强转。

void remove()//将下一个要遍历的元素移除。

for-each
for(<引用类型><引用变量> : <集合引用>){}

HashSet hs = new Hash(Collection c);
for(Object o : hs){
    String temp = (String)o;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值