Collection接口:单列集合,用来存储一个一个的对象
* 子接口List:存储有序的、可重复的数据 “动态”数组
* ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
* LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
* Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储
* List(动态数组)
ArrayList、LinkedList、Vector的异同?
* 同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据
* 异:
* ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
* LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
* Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储
* List接口中常用方法
* 加索引
*void add(int index, Object obj):在index位置插入元素obj
*boolean addAll(int index, Collection c):在index位置开始,将集合c中的所有元素添加到当前集合
*get(int index):获取指定index位置的元素
*int indexOf(Object o):返回o在集合中首次出现的位置
* int lastIndexOf(Object o):返回o在集合中最后出现的位置
*Object remove(int index):移除指定index位置的元素,并返回此元素
*Object set(int index, Object obj):设置指定index位置的元素为obj
* List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集和(左闭右开)
*
*
*
* 常用方法:
* 增:add(Object obj)
* 删:remove(int index)/remove(Object obj)
* 改:set(int index, Object obj)
* 查:get(int index)
* 插: add(int index, Object obj)
* 长度:size()
* 遍历:①Iterator迭代器
* ②foreach(增强for循环)
* ③普通for循环
import org.junit.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Collection接口:单列集合,用来存储一个一个的对象
* 子接口List:存储有序的、可重复的数据 “动态”数组
* ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
* LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
* Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储
* List(动态数组)
*
*
* @author orz
*/
public class ListTest {
/**
* ArrayList、LinkedList、Vector的异同?
* 同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据
* 异:
* ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储
* LinkedList:对于频繁地插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
* Vector:古老的List实现类;线程安全的,效率较低;底层使用Object[]存储
*/
/**
* List接口中常用方法
* 加索引
*void add(int index, Object obj):在index位置插入元素obj
*boolean addAll(int index, Collection c):在index位置开始,将集合c中的所有元素添加到当前集合
*get(int index):获取指定index位置的元素
*int indexOf(Object o):返回o在集合中首次出现的位置
* int lastIndexOf(Object o):返回o在集合中最后出现的位置
*Object remove(int index):移除指定index位置的元素,并返回此元素
*Object set(int index, Object obj):设置指定index位置的元素为obj
* List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集和(左闭右开)
*
*
*
* 常用方法:
* 增:add(Object obj)
* 删:remove(int index)/remove(Object obj)
* 改:set(int index, Object obj)
* 查:get(int index)
* 插: add(int index, Object obj)
* 长度:size()
* 遍历:①Iterator迭代器
* ②foreach(增强for循环)
* ③普通for循环
*
*/
@Test
public void test1()
{
ArrayList list = new ArrayList();
list.add("hello");
list.add("AA");
list.add(123);
list.add(new Person(21,"tom"));
System.out.println(list);
list.add(1,"BB");
System.out.println(list);
System.out.println("**********");
ArrayList list1 = new ArrayList();
list1.add("Jack");
list1.add("Cat");
System.out.println(list1);
list1.addAll(1,list);
System.out.println(list1);
System.out.println("***********");
System.out.println(list);
System.out.println(list.get(1));
System.out.println("*************");
System.out.println(list);
System.out.println(list.indexOf("AA"));
System.out.println("*************");
list.add("AA");
System.out.println(list);
System.out.println(list.lastIndexOf("AA"));
System.out.println("**********");
System.out.println(list);
Object remove = list.remove(1);
System.out.println(remove);
System.out.println(list);
System.out.println("**********");
System.out.println(list);
Object man = list.set(1, "Man");
System.out.println(list);
System.out.println("******");
List list2 = list.subList(1, 3);
System.out.println(list);
System.out.println(list2);
}
/**
* List遍历
*/
@Test
public void test2()
{
ArrayList list = new ArrayList();
list.add("hello");
list.add("AA");
list.add(123);
list.add(new Person(21,"tom"));
// ①Iterator迭代器
Iterator iterator = list.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
// ②foreach(增强for循环)
System.out.println();
for (Object obj:list)
{
System.out.println(obj);
}
// ③普通for循环
System.out.println();
for (int i = 0; i <list.size() ; i++) {
System.out.println(list.get(i));
}
}
/**
* 面试题
*/
@Test
public void test3()
{
List list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
updateList(list);
System.out.println(list);
updateList2(list);
System.out.println(list);
}
private static void updateList(List list)
{
list.remove(2);
}
private static void updateList2(List list)
{
list.remove((Integer) 2);
}
}
import java.util.Objects;
public class Person implements Comparable{
private int age;
private String name;
public Person() {
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
//按照姓名从小到大排序,年龄从小到大
@Override
public int compareTo(Object o)
{
if(o instanceof Person)
{
Person person=(Person)o;
// return this.name.compareTo(person.name);
int compare=this.name.compareTo(person.name);
if(compare!=0)
{
return compare;
}
else
{
return Integer.compare(this.age,person.age);
}
}
else
{
throw new RuntimeException("输入的类型不匹配");
}
}
}