1, UML集合类图(集合与集合之间的关系)
2,集合特点
1:list本身就是一个容器,我们学习集合框架就是了解容器的数据结构。
2:数组长度是固定的,list集合长度不固定。
3:数组是无序,且不可重复的,list集合是有序且可重复的。
ps:list集合直接移除对象(remove("a"))返回Boolean类型,通过下标移除(remove(0))返回这个下标对应的元素。
3,遍历方式
fori:
for(int i=0;i<xyy.size();i++){
System.out.println(xyy.get(i));
}
foreach:
for(Object o:xyy){
System.out.printIn(o);
}
lterator:
Iterator it=xyy.iterator();
whlie (it.hasNext()){
System.out.println(it.next());
}
ps:有时候报错是需要强转。
运行结果:
4,子类LinkedList
ArrayList查询&&修改快;删除新增慢
LinkedList删除&&新增快;查询修改慢
实现队列&堆栈
List< String> list=new LinkedList<>();
Duilie dl=new Duilie(list);
//Duizhan dl=new Duizhan(list);
dl.push("1");
dl.push("2");
dl.push("3");
System.out.println(dl.pop());
System.out.println(dl.pop());
System.out.println(dl.pop());
队列:先进先出
class Duilie{
LinkedList ll=null;
public Duilie(List<String> ll){
this.ll=(LinkedList) ll;
}
public String pop() {
return (String) ll.removeFirst();
}
public void push(String s) {
ll.add(s);
}
}
堆栈:先进后出
class Duizhan{
LinkedList ll=null;
public Duizhan(List<String> ll){
this.ll=(LinkedList) ll;
}
public String pop() {
return (String) ll.removeLast();
}
public void push(String s) {
ll.add(s);
}
}
5,增长因子
List集合底层是数组结构
“可变数组”
一旦超过默认数组大小,会自动扩容
扩容增长因子为0.5
运行结果:
6,ArrayList去重
list集合装string类型时可以采用contains方法去重复
List<String> list=new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("2");
if(!list.contains("2")) {
list.add("2");
}
System.out.println(list);
对于其他的类型而言,ArrayList集合去重与去重对象的equals方法有关
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;
}
增加equals方法后,运行结果中无重复值。