Java新手:ArrayList类、LinkedList类

Collection接口

1、 boolean add(Object e): 向集合中添加元素
2、 void clear() :清空集合中所有元素
3、 boolean contains(Object o) :判断集合中是否包含某个元素
4、 boolean isEmpty():判断集合中的元素是否为空
5、 boolean remove(Object o) :根据元素的内容来删除某个元素
6、 int size():获取集合的长度
7、 Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中

public class CollectionDemo {
	public static void main(String[] args) {
		Collection c =new ArrayList<>();//Collection是接口,不能实例化,使用多态
		c.add("zhangsan");//增加元素
		c.add("lisi");
		c.add("wangwu");
		System.out.println(c);
		System.out.println(c.contains("lisi"));//判断集合中是否包含指定元素
		System.out.println(c.contains("zhaoliu"));
		System.out.println(c.isEmpty());//集合是否为空
		System.out.println(c.size());//集合的长度
		System.out.println(c.remove("lisi"));//删除元素,成功返回true
		Object[] obj = c.toArray();//将集合转换成一个Object数组,因为集合中可以存任何类型的对象
		for(int i=0;i<obj.length;i++){
			System.out.println(obj[i]);
		}
		c.clear();//清空集合
		System.out.println(c);
	}
}

输出结果:

[zhangsan, lisi, wangwu]
true
false
false
3
true
zhangsan
wangwu
[]

8、迭代器
Collection集合元素的通用获取方式:在取元素之前先判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,如果还有就再取出来,一直把集合中的所有元素都取出。

  • Iterator it =c.iterator()----获取迭代器对象
  • E next() :返回下一个元素,用来返回迭代的下一个元素,并把指针向后移动一位。
  • boolean hasNext() :判断是否有元素可以获取,判断集合中是否有元素可以迭代
public static void main(String[] args) {
		Collection c =new ArrayList<>();
		c.add("zhangsan");
		c.add("lisi");
		c.add("wangwu");
		Iterator it =c.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
}

注意:

  1. 使用next方法获取下一个元素,如果没有元素可以获取,则出现NoSuchElementException异常,所以通常和hasNext()方法一块使用
  2. 集合的遍历方式:上面7和8 的方法(toArray()和Iterator()两个方法)

9、并发修改异常ConcurrentModificationException处理(使用迭代器才会出错):
当使用迭代器遍历集合时,使用集合中的增加和删除方法时,会出现并发修改异常,迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常。
使用迭代器的解决方法:需要使用Iterator的子接口ListIterator来实现向集合中添加

	public static void main(String[] args) {
//		Collection c =new ArrayList<>();//变成下面的
		List c =new ArrayList<>();
		c.add("zhangsan");
		c.add("lisi");
		c.add("wangwu");
//		Iterator it =c.iterator();//变成下边的
		ListIterator it =c.listIterator();
		while(it.hasNext()){
			String s =(String)it.next();
			if(s.equals("lisi")){
				c.remove("lisi");
			}
		}
		System.out.println(c);
}

输出结果: [zhangsan, wangwu]
10、泛型
集合中是可以存放任意对象的,只要把对象存储集合后,这时他们就会被提升成Object类型,当取出对象进行相应的操作时,需要采用类型转换,可能在转换的时候出现类型转换异常。
泛型的好处:避免了类型转换问题,可以减少黄色警告线,可以简化代码的书写。

public static void main(String[] args) {
		Collection<Student> c =new ArrayList<>();
		Student s =new Student("zhangsan",18);
		Student s1 = new Student("lisi",19);
		c.add(s);
		c.add(s1);
		Iterator it =c.iterator();
		while(it.hasNext()){
			Student stu = (Student) it.next();
			System.out.println(stu.name);
		}
}

输出结果:
zhangsan
lisi
11、增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合。内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

public static void main(String[] args) {
		Collection<Student> c =new ArrayList<>();
		Student s =new Student("zhangsan",18);
		Student s1 = new Student("lisi",19);
		c.add(s);
		c.add(s1);
		for(Student stu :c){   //for(元素类型  变量:集合或者数组对象){}
			System.out.println(stu.name);
		}
}

List子体系

  1. List是在java.util包下的接口,需要导包,List是有序的(存储和读取的顺序是一致的),有整数索引,允许重复的。
  2. List的特有功能:
    1、void add(int index, E element) :将元素添加到index索引位置上
    2、 E get(int index) :根据index索引获取元素
    3、E remove(int index) :根据index索引删除元素
    4、 E set(int index, E element):将index索引位置的的元素设置为element
  • 增删改查
public static void main(String[] args) {
	   List list =new ArrayList<>();
	   list.add(0, "hello");
	   list.add(1, "world");
	   System.out.println("list="+list);
	   list.add(0, "你好");
	   System.out.println("list=="+list);
	   for(int i=0;i<list.size();i++){
		   System.out.println(list.get(i));
	   }
	   System.out.println("删除第一个是:"+list.remove(0));
	   System.out.println("修改第一个元素是"+list.set(0, "hi"));
	   System.out.println("list==="+list);
	}

输出结果:

list=[hello, world]
list==[你好, hello, world]
你好
hello
world
删除第一个是:你好
修改第一个元素是hello
list===[hi, world]

注意:list的操作不可以越界,否则会报错。

  1. List常用子类:
    1、 ArrayList:底层是数组结构,查询快,增删慢。
    2、LinkedList:底层是链表,查询慢,增删快。
    3、LinkedList的特有功能:
    void addFirst(E e) :向链表的头部添加元素
    void addLast(E e) :向链表的尾部添加元素
    E getFirst() :E getFirst():获取链头的元素,不删除元素
    E getLast() :获取链尾的元素,不删除元素
    E removeFirst() :返回链头的元素并删除链头的元素
    E removeLast() :返回链尾的元素并删除链尾的元素
public static void main(String[] args) {
		LinkedList list =new LinkedList<>();
		list.add("hello");
		list.add("world");
		list.addFirst("java");
		list.addLast("c++");
		System.out.println("list="+list);
		System.out.println(list.getFirst());
		System.out.println(list.getLast());
		System.out.println(list.removeFirst());
		System.out.println(list.removeLast());
		System.out.println("list=="+list);
	}

输出结果:

list=[java, hello, world, c++]
java
c++
java
c++
list==[hello, world]

猜你喜欢

转载自blog.csdn.net/w_e_i_1201/article/details/83785544
今日推荐