/**
* 在迭代时不可通过集合对象的方法操作集合中的元素 比如 : list.add(); list.set();等
* List集合特有迭代器ListIterator是Iterator的子接口,因为有下标
*/
public static void listIterator(){
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
ListIterator li = list.listIterator();
//正向迭代
while (li.hasNext()){
if(li.next() == "2")
li.set("4");
}
System.out.println(list);
//反向迭代
while (li.hasPrevious()){
System.out.println(li.previous());
}
}
LikedList特有方法:
remove方法如果集合为空则会报NoSuchElementException 错
HashSet集合保证元素唯一的方法:
通过元素的两个方法,hashCode()和equals()方法来完成,如果元素的hashCode值相同,才会调用equals方法判断是否为true,如果元素的hashCode值不同,不会调用equals方法,所以要完成属性相同则视为同一对象则需要复写hashCode()和equals()方法
注意:
hashSet 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法
ArrayList判断元素是否相同用equals一个方法
Set集合:无序,不可重复元素
HashSet:数据结构是哈希表,线程是非同步的,保证元素唯一的方法看上述
TreeSet:可以对set集合中的元素进行排序,底层数据结构为二叉树(红黑树),保证元素唯一性的依据:compareTo方法return 0;
排序的实现方式:
第一种:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法,也称为元素的自然排序或者默认排序
第二种:当元素不具备比较性或者具备的比较性不是所需要的,这是需要让集合自身具备比较性。在集合初始化时就具有比较方式,定义比较器(定义一个类实现Comparator接口,覆盖compare方法),将比较器对象做为参数传递给TreeSet集合的构造函数
当两种方法都存在时,以比较器为主
关于Arrays.asList()的使用(将数组转换为list集合):
如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素
如果数组中的元素都是基本数据类型,那么会将该数组做为集合中的元素存在(返回的hashCode地址)
Collection.toArray()集合变数组:
List<String> arrayList = new ArrayList<String>();
arrayList.add("sfd");
arrayList.add("ad");
arrayList.add("ads");
/**
其中 String[]长度定义为集合的长度(size),
如果定义的长度大于size则该方法不会再创建数组,而是使用该传入数组,其余元素用默认值填充,
如果定义的长度小于size则该方法内部会创建一个长度为size的新数组
这里采用 size定义数组最优
*/
String[] strs = arrayList.toArray(new String[arrayList.size()]);