首页 > 学院 > 开发设计 > 正文

集合类知识点总结

2019-11-06 08:51:56
字体:
来源:转载
供稿:网友
1.集合中存放的都是地址,而不是对象。

2.

for(Iterator it=al.iterator();it.hasNext();){  sop(it.next());}

上边这种使用迭代器的方法效率更高,因为for循环执行完以后,就可以释放掉迭代器.

3.

   list:元素是有序的,元素可以重复,因为该集合体系有索引

  ArrayList:底层的数据结构使用的数组,特点:查询速度快,增删慢  LinkedList:底层的数据结构使用的链表,反之。  Vector:底层是数组数据结构,线程同步。  set:元素是无序的,元素不可以重复。  list集合特有的方法:增:add(index,element)addAll(index,Collection)删除:remove(index)改:set(index,element);查:get(index);subList(from,to);listIterator();4.List集合特有的迭代器ListIterator是Iterator的子接口,在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生异常,所以,在迭代时只能用迭代器来操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作方法,比如,添加,修改就需要使用ListIterator子接口,该接口只能通过LIst集合的ListIter方法获取。5.LinkedList:特有方法;  addFirst();  addLast();  getFirst();  getLast();  获取元素,但是不删除元素。  removeFirst();  removeLast() ;  获取元素,同时元素被删除,如果集合中没有元素会出现异常,现在用offerFirst代替 addFirst();用pollFirt代替removeFirst()。6.使用LinkedList实现队列这种数据结构:
class Duilie{	PRivate LinkedList link;	Duilie()	{		link=new LinkedList();			}	public void myAdd(Object obj)	{		link.addFirst(obj);	}	public Object myGet()	{		return link.removeLast();	}	public boolean isNull()	{		return link.isEmpty();	}}7.LinkedList,arrayList中的contains,remove方法都调用了equals方法,默认比较的是两个对象的地址,如果比较的规则发生了改变,那么就要覆写该对象中的equals方法。8.Set集合的功能和Collection是一致的。HashSet:底层结构是哈希表。hashSet先通过元素的hashCode和equals方法来保证元素的唯一性的,如果元素的HashCode值相同,才会判断equals是否为true,如果元素的hashcode不同,那么是不会调用equals方法的。通常要覆写对象的HashCode和equals方法,对于判断元素是否存在,以及删除等操作,依赖的方法是hashCode和equals方法,而ArrayList只是通过equals方法来判断元素是否一样。TreeSet:可以对Set集合中元素进行排序。          排序时,当主要条件相同时,一定要判断一下,次要条件。 当compare方法返回1时,所有的元素都排在第一个元素的右边,返回0时,只能存入一个元素,返回-1时,所有的元素都排在第一个元素的左边。  排序的第一种方式:让元素自身具有比较性,实现Compare接口,覆盖CompareTo方法。  排序的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是必需的,这时就要让集合自身具备比较性。在集合初始化时就具有比较性。当两种排序都存在时以比较器为主,实现Comparator接口,覆盖compare方法。9.泛型:1.将运行时期出现的问题转移到了编译时期。2.避免了强制转换。3.泛型格式:通过<>来定义要操作的数据类型,通常在集合框架中很常见。当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在定义泛型来完成扩张。4.泛型类定义的泛型,在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型都已经固定了。那么为了让不同方法操作不同类型,那么可以将泛型定义在方法上。5.静态方法不可以定义类上定义的泛型,如果类型不确定,可以定义在静态方法上。6.?表示通配符,也可以理解为占位符,泛型的限定:? extends E:可以接受E类型或则E的子类型。            ? super E:可以接受E类型或者E的父类型。7.map集合类:Map(取出原理:将map集合装换成set集合,再通过迭代器取出):1.HashMap:底层是哈希表数据结构,允许使用null键null值,该集合是线程不同步的,效率高。null可以作为键存在,也可以作为值存在。存入新的键时,新的值会替换老的值。并返回被覆盖的那个值。2.HashTable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。效率低,不支持空键空值。3.TreeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序。Set<Map,Entry<k,v>>entrySet:将map集合中的映射关系存入到set集合中,而这些类型的数据类型都是map.entry。8.如果一个对象可能会装入hash...的容器中,那么要覆写hashCode和equals方法,如果这个对象可能被tree...的容器存储,并且不打算使用默认的排序方式,那么可以实现Comparator接口并在创建对象的时候实例化这个比较器。9.使用Array.asList将数组变为集合的注意点:如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素,如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。10.Collection接口中的toArray方法:当指定类型的数组长度小于集合的size那么该方法内部会创建一个新的数组,长度为集合的size,当指定类型的数组长度大于集合的size,就不会创建数组,而是使用传递过来的数组,所以创建一个刚刚好的数组是最优的。2.集合变为数组的原因:为了限定对元素的操作,(限制对集合的正删改查操作 ,)高级for循环格式:for(数据类型  变量名:被遍历的集合(Collection)或者数组)局限:只能对集合进行遍历,但是不能对集合进行操作。迭代器除了遍历,还可以进行remove集合中的元素的操作,如果使用ListIterator,还可以在遍历过程中对集合进行增删改查操作。传统for循环和高级for的区别;高级有一个局限性;必须有被遍历的目标!!!建议在遍历数组的时候使用传统for语句。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表