ArrayList
无参构造 默认长度为10
单参构造 可以传入一个Collection对象 转为一个ArrayList对象
单参构造 传入设定的初始空间大小int 作为构造方法参数
能扩容最大到int类型大小-8 扩容方法grow()
void .add(int,Object)
E .get(int) 根据下标找到对象
E .remove(int) 根据下标移除对象 返回这个被移除的对象
E .set(int,Obejct) 将当前下标的对象替换为新的对象 返回被替换的对象
int .indexOf(Object) 通过对象找下标 lastIndexOf(对象)
void .trimToSize() 将集合中多余的空间删除
迭代器
Iterator迭代器对象 通过指针移动 判断元素是否存在 存在则获取这个元素
Iterator<Student> is = as.iterator();
while(is.hasNext()) {
Student s = is.next();
System.out.println(s.toString());
}
双向迭代器 ListIterator 通过参数 设置指针停留在最后
ListIterator<Student> ls = as.listIterator(as.size());
while(ls.hasPrevious()) {
Student s = ls.previous();
System.out.println(s.toString());
}
注意:在迭代器使用过程中 不应该通过其他对象对集合进行更新操作
迭代器对象提供有一个自己的remove() 删除当前元素
Vector集合 古老的线程安全的集合结构 可以使用增强for循环 有自己的迭代器对象
Vector vs = new Vector();
vs.add(new Student(“张三”,18));
vs.add(new Student(“李四”,20));
vs.add(0,new Student(“小二”,17));
// for(Student s : vs) {
// System.out.println(s.toString());
// }
//创建Vector集合的迭代器对象
Enumeration es = vs.elements();
while(es.hasMoreElements()) {
Student s = es.nextElement();
System.out.println(s.toString());
}
练习:
保存商品 Goods name属性
有Sport类型 有价格price属性 Study类型 有数量num属性
使用ArrayList集合保存 使用迭代器正向逆向输出
LinkedList
增删快 查询慢(从第一个元素开始挨个遍历查找)
一根链条表示索引
一根链条记录顺序
无参构造 默认长度为0
单参构造 可以传入一个Collection对象 转为一个LinkedList对象
void .add(int,Object)
E .get(int) 根据下标找到对象
E .remove(int) 根据下标移除对象 返回这个被移除的对象
E .set(int,Obejct) 将当前下标的对象替换为新的对象 返回被替换的对象
int .indexOf(Object) 通过对象找下标 lastIndexOf(对象)
void .addFirst(Object)
void .addLast(Object)
E .getFirst()
E .getLast()
E .removeFirst()
E .removeLast()
=======================================================================
boolean .offer(Object) 向集合尾部添加
boolean .offerFirst(Object) 向集合头部添加
boolean .offerLast(Object) 向集合尾部添加
E .element() 查询但不删除首元素
E .peek() 查询但不删除首元素
E .peekFirst() 查询首元素
E .peekLast() 查询尾元素
E .poll() 查询并删除首元素
E .pollFirst() 查询并删除首元素
E .pollLast() 查询并删除尾元素
HashSet
无序 不能存储重复数据 自动去重
**对于基本数据类型 String 自动去重
**对于其他引用数据类型 默认判断地址是否相同 不同则不去
如果希望根据属性值判断 手动添加hashCode() equals() 即使地址不同 只要属性值相同 依然可以去重
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
Java中实现去重 通过hashCode() 和 equals() 共同实现
hashCode()获取一个哈希值
每次输出一个引用数据类型 @后的十六进制值--》将这个对象调用hashCode()得到的哈希值转成十六进制
String s1 = "重地";
String s2 = "通话";
System.out.println(s1.hashCode());//1179395
System.out.println(s2.hashCode());//1179395
//所以还需要配合equals()
讲无序集合转成有序集合 实现 通过下标访问元素
HashSet<String> hi = new HashSet<String>();
hi.add("123");
hi.add("456");
hi.add("123");
ArrayList<String> as = new ArrayList<String>(hi);
LinkedList<String> ls = new LinkedList<String>(hi);
System.out.println(as.get(4));
比较器