博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础之List的子类(ListArray,LinkedList,Vector)
阅读量:2743 次
发布时间:2019-05-13

本文共 6184 字,大约阅读时间需要 20 分钟。

 List 集合:

       
List 的子类:                
                
ArrayList:
        
1> 底层数据结构式数组结构,查询块,增删慢;
        
2> 从内存角度考虑:线程不安全的,不同步的,执行效率高;
        
3> 多线程:synchronized(同步的意思 ==> 解决线程安全问题);
        sychronized(锁对象){
//同步代码 
        共享数据;
        }
        
4> 解决线程安全问题,通过同步可以解决,但是效;率低了;
        
LinkedList:
        
1> 底层数据结构式链表结构,查询慢,增删块;
        
2> 从内存角度考虑:线程不安全,不同步,执行效率高;
        
Vector:
        
1> 这是一个线程安全的类,底层数据结构是数组:查询快,增删慢;

         2> 线程安全的,同步,执行效率低;

ArrayList:是List接口中常用的一个子实现类;

       
遍历功能:
                
1> 一个是Collection的iterator( );

2> size()和get(int index)普通for循环;

        举例:

public class ArrayListDemo {	public static void main(String[] args) {				//创建集合对象		ArrayList list = new ArrayList() ;				//添加元素		list.add("hello") ;		list.add("world") ;		list.add("java") ;						//遍历		//方式1:获取迭代器		Iterator it = list.iterator() ;		while(it.hasNext()) {			String s = (String)it.next() ;			System.out.println(s);		}				System.out.println("-----------------------");		                //方式2:使用size()和get(int index)加上for循环遍历		for(int x = 0 ; x < list.size() ; x ++) {			String s = (String) list.get(x) ;			System.out.println(s);		}			}}
       
ArrayList集合存储自定义对象并遍历:
                   
举例:
import java.util.ArrayList;import java.util.Iterator;/** * ArrayList集合存储自定义对象并遍历 */class Student {		private String name ;	private int age ;		public Student() {		super();	}	public Student(String name, int age) {		super();		this.name = name;		this.age = age;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}}public class ArrayListDemo2 {		public static void main(String[] args) {				//创建集合对象		ArrayList  array = new ArrayList();				//创建学生对象		Student s1 = new Student("鲁智深", 30) ;		Student s2 = new Student("武松", 40) ;		Student s3 = new Student("宋江", 50) ;		Student s4 = new Student("杨志", 25) ;				//添加元素		array.add(s1) ;		array.add(s2) ;		array.add(s3) ;		array.add(s4) ;				//迭代器方式		Iterator it = array.iterator() ;		while(it.hasNext()) {			Student s = (Student)it.next() ;			System.out.println(s.getName()+"---"+s.getAge());		}				System.out.println("--------------------");		//集合遍历		for(int x = 0 ; x 
       
综合练习:
package org.westos_05;import java.util.ArrayList;import java.util.Iterator;/** *需求:给集合中添加重复的元素(字符串类型),将重复的元素从集合去除掉! * *思路: *		1)创建一个旧集合,添加重复元素 *		2)创建一个新集合 *		3)遍历旧集合中的元素获取到每一个元素 *			在旧集合中判断新集合中是否包含旧集合中的元素 *				包含,不搭理 *				不包含,添加到新集合中 * *		4)遍历新集合 */public class ArrayListTest {		public static void main(String[] args) {				//创建一个集合		ArrayList list = new ArrayList() ;				//添加元素		list.add("hello") ;		list.add("world") ;		list.add("java") ;		list.add("javaee") ;		list.add("hello") ;		list.add("world") ;		list.add("hello") ;		list.add("javaee") ;		list.add("android") ;		list.add("python") ;		list.add("php") ;		list.add("php") ;				//创建一个新的集合		ArrayList newList = new ArrayList() ;				//遍历旧集合		Iterator it = list.iterator() ;		while(it.hasNext()) {			String s = (String) it.next() ;						//判断新集合中是否包含旧集合中的元素			if(!newList.contains(s)) {				newList.add(s) ;			}		}				//遍历新集合		Iterator it2 = newList.iterator() ;		while(it2.hasNext()) {			String s = (String) it2.next() ;			System.out.println(s);		}	}}
       
注意:
               
1> 如果上述例题允许创建一个新的集合,怎么办?
//使用双层for循环来求解://引入选择排序,两个两个比较,要是相等,那么久删除后边的元素,继续循环判断,知道程序结束for(int x = 0 ; x < array.size()-1 ; x ++) {	for(int y = x +1 ; y < array.size() ; y ++) {		//判断,前面的索引对应的元素和后面索引对应的元素进行比较,如果相等就干掉后面重复的		if(array.get(x).equals(array.get(y))) {			array.remove(y) ;			y-- ;		}	}}
               
2> 使用集合ArrayList存储自定义对象(Student),去除重复的对象:
                       
问题:这里如果在Student类中没有重写equals方法,那么程序执行错误;
                       
原因:contains的底层需要用equals,equals默认比较的是地址值,所以想要内容相等就需要
重写equals方法
//创建一个新集合ArrayList newArray = new ArrayList() ;		//遍历旧集合Iterator it = array.iterator() ;while(it.hasNext()) {	Student s = (Student)it.next() ;				//判断,新集合中是否包含	if(!newArray.contains(s)) {   //contains底层依赖于equals方法,想要比较内容需要重写equals方法;		newArray.add(s) ;	}}		//遍历新集合Iterator it2 = newArray.iterator() ;while(it2.hasNext()) {	Student s= (Student)it2.next();	System.out.println(s.getName()+"---"+s.getAge());}

Vector集合:

       
特有功能:
                public void addElement(Object obj)  --->相当于:add(Object obj);
                public Enumeration elements():返回此向量的枚举--->相当于:public Iterator iterator();
                boolean hasMoreElements()  --->相当于:boolean hasNext();

                Object nextElement() --->相当于:Object next() ;

        举例:

import java.util.Enumeration;import java.util.Vector;public class VectorDemo {		public static void main(String[] args) {				//创建集合对象		Vector v = new Vector() ;				//添加元素		v.addElement("hello"); 		v.addElement("world");		v.addElement("java");				//遍历		//获取Enumeration :向量的枚举		Enumeration en = v.elements() ;		while(en.hasMoreElements()) {			String s = (String)en.nextElement() ;			System.out.println(s);		}	}}

LinkedList集合:

       
特有功能:
                
添加功能:
        addFirst(Object e):将指定的元素插入到列表的开头;
        addLast(object e):将指定的元素添加到列表末尾;
        
获取功能:
        getFirst():获取列表第一个元素;
        getLast():获取列表第二个元素;
        
删除功能:
        public Object removeFirst():移除并返回此列表的第一个元素;
                        public Object removeLast():移除并返回此列表的最后一个元素;

        举例:

import java.util.LinkedList;public class LinkedListDemo {		public static void main(String[] args) {				//创建LinkedList集合对象		LinkedList link = new LinkedList() ;				//添加元素		link.add("hello"); 		link.add("world"); 		link.add("java"); 		System.out.println("link:"+link);				//addFirst(Object e):将指定的元素插入到列表的开头		link.addFirst("android");		System.out.println("link:"+link);				//addLast(object e):将指定的元素添加到列表末尾		link.addLast("mysql");		System.out.println("link:"+link);				//getFirst():获取列表第一个元素		System.out.println(link.getFirst());		System.out.println(link.getLast());				//public Object removeFirst()移除并返回此列表的第一个元素。 		System.out.println("removeFirst():"+link.removeFirst());		System.out.println("link:"+link);				//public Object removeLast()		System.out.println("removeLast():"+link.removeLast());		System.out.println("link:"+link);	}}

        使用LinkedList模拟一个栈:(先进后出);

                举例:

package org.westos_04;import java.util.Iterator;import java.util.LinkedList;/** * 需求: * 		模拟栈结构的特点,先进后出 *  * 理解:需要自定义一个类,在这个类中使用LinkedList集合的特有功能进行操作 * 		 * */public class LinkedListDemo {		public static void main(String[] args) {				//创建linkedList集合对象		LinkedList link = new LinkedList() ;				//添加元素		//符合栈结构的特点:先进后出		link.addFirst("hello");		link.addFirst("world");		link.addFirst("java");				//使用迭代器遍历		Iterator it = link.iterator() ;		while(it.hasNext()) {			String s = (String)it.next();			System.out.println("s:"+s);		}			}}

转载地址:http://vozad.baihongyu.com/

你可能感兴趣的文章
使用nginx来完成反向代理及处理静态文件请求
查看>>
IntelliJ IDEA 配置Tomcat运行web项目
查看>>
在IntelliJ IDEA 中创建运行web项目
查看>>
intellij idea在运行web项目时部署的位置(tomcat)
查看>>
Intellij IDEA Debug调试技巧
查看>>
JAVA printWriter中write()和println()区别(特别注意)
查看>>
JAVA如何通过正则表达式获取文本中数字
查看>>
Java正则表达式过滤出字母、数字和中文
查看>>
oracle增加表空间的四种方法
查看>>
Oracle之主键(Primary Key)用法详解
查看>>
oracle什么时候需要commit
查看>>
对象转JSONArray,JSONObject[包括对象中日期格式化,属性过滤]
查看>>
oracle auto increment
查看>>
Tomcat解惑 之 CATALINA_HOME与CATALINA_BASE
查看>>
IntelliJ IDEA通过Tomcat启动项目过程分析
查看>>
intelliJ Idea + Tomcat部署(详细版本)
查看>>
Oracle初学者之grant授权
查看>>
servlet/filter/listener/interceptor区别与联系
查看>>
oracle11g卸载(win10)
查看>>
Oracle 11g各种服务作用以及哪些需要开启
查看>>