(33)Java学习笔记——集合框架 / List集合&子类 / 常见数据结构

来源:互联网 发布:个人备案域名做淘宝客 编辑:程序博客网 时间:2024/05/16 13:45

List 集合

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

**可以通过索引去访问。

与 set 不同,列表通常允许重复的元素。

特点:有序的(存储和取出的元素一致),可重复的

范例:

package cn.itcast_01;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/* * List 集合存储字符串并遍历 */public class ListDemo {public static void main(String[] args) {//创建集合对象List list = new ArrayList();//创建字符串并添加字符串list.add("hello");list.add("world");list.add("java");//遍历集合Iterator it = list.iterator();while(it.hasNext()){String s = (String) it.next();System.out.println(s);}}}

List 集合特有功能:

A / 添加功能

void add(int index, Object element)  //在制定位置添加一个元素

B /获取功能:

Object  get (int index)  //获取制定位置的元素

C / 列表迭代器

ListIterator  listIterator()   //List 集合特有的迭代器

D / 删除功能

Object remove(int index)  // 根据索引删除元素,返回被删除的元素

E / 修改功能

Object set (int index , Object element)     //根据索引修改元素,返回被修改的元素

范例01:

package cn.itcast_02;import java.util.ArrayList;import java.util.List;/* * List集合的特有功能 * A / 添加功能void add(int index, Object element)  //在制定位置添加一个元素B /获取功能:Object  get (int index)  //获取制定位置的元素C / 列表迭代器ListIterator  listIterator()   //List 集合特有的迭代器D / 删除功能Object remove(int index)  // 根据索引删除元素,返回被删除的元素E / 修改功能Object set (int index , Object element)     //根据索引修改元素,返回被修改的元素 */public class ListDemo {public static void main(String[] args) {//创建集合对象List list = new ArrayList();//创建对象并添加元素list.add("hello");list.add("world");list.add("java");System.out.println("list:"+list);   //list:[hello, world, java]//void add(int index, Object element)  //在制定位置添加一个元素list.add(1, "Android");//list.add(11."javaEE"); //有问题,越界了//list.add(3,"javaEE"); //没问题,可以最后一位添加System.out.println("list:"+list);    //list:[hello, Android, world, java]//Object  get (int index)  //获取制定位置的元素System.out.println("get:"+list.get(2));  //get:world//Object remove(int index)  // 根据索引删除元素,返回被删除的元素System.out.println("remove:"+list.remove(1));   //remove:AndroidSystem.out.println("list:"+list); // list:[hello, world, java]//Object set (int index , Object element)     //根据索引修改元素,返回被修改的元素System.out.println("set:"+list.set(1, "Android"));   //set:worldSystem.out.println("list:"+list);    //list:[hello, Android, java]}}
范例02:size() 和get() 方法结合使用

List集合的特有遍历功能: size() 和get() 方法结合使用

范例: size() 和get() 方法结合使用

package cn.itcast_03;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/* * ListIterator list列表迭代器 */public class ListIteratorDemo {public static void main(String[] args) {//创建集合对象List list = new ArrayList();//创建对象并添加list.add("hello");list.add("world");list.add("java");//Object  get (int index)  //获取制定位置的元素//System.out.println(list.get(0));//可以用size() 和 get()结合来遍历for(int x=0;x<list.size();x++){String s = (String) list.get(x);System.out.println(s);}}}
ListIterator  listIterator()   //List 集合特有的迭代器

特有功能:Object  previous()    // 返回上一个元素位置

对应的方法:boolean hasPrevious()   //判断前面是否有元素

要想逆向,必须先正向遍历,才能逆向遍历

范例03:

package cn.itcast_03;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;/* * ListIterator   List集合特有的迭代器 */public class ListIteratorDemo2 {public static void main(String[] args) {//创建集合对象List list = new ArrayList();//创建对象并添加list.add("hello");list.add("world");list.add("java");//ListIterator  listIterator()   //List 集合特有的迭代器ListIterator lit = list.listIterator();  //子类对象while(lit.hasNext()){String s = (String) lit.next();   //正向遍历System.out.println(s);}System.out.println("---------------------");//previous()  返回上一个元素while(lit.hasPrevious()){String s2 = (String)lit.previous();   //逆向遍历System.out.println(s2);}System.out.println("---------------------");//迭代器Iterator it = list.iterator();while(it.hasNext()){String s1 = (String) it.next();System.out.println(s1);}System.out.println("---------------------");}}

————————————————————————————————————

常见数据结构  :数据的组织方式

队列

数组

链表

哈希值



List 的子类特点:

ArrayList

底层数据结构是数组,查询快,增删慢。

线程不安全,效率高。

Vector

底层数据结构是数组,查询快,增删慢。

线程安全,效率低。

LinkedList

底层数据结构是列表,查询慢,增删快。

线程不安全,效率高。


ArrayList的使用

范例:存储字符串或者存储自定义对象并遍历

package cn.itcast_04;import java.util.ArrayList;import java.util.Iterator;/* * ArrayList的使用 * 存储字符串或者存储自定义对象并遍历 */public class ArrayListDemo {public static void main(String[] args) {//创建对象ArrayList al = new ArrayList();//创建字符串或对象并添加al.add("hello");al.add("world");al.add("java");//遍历方法1for(int x=0;x<al.size();x++){String s = (String) al.get(x);System.out.println(s);}System.out.println("----------------------");//遍历方法2Iterator it = al.iterator();while(it.hasNext()){String s = (String) it.next();System.out.println(s);}}}

Vector的特有功能

1 / 添加功能

public void addElement(Object obj)

2 / 获取功能

public Object elementAt(int index)

public Enumeration elements()   //类似迭代器

-------------------------| boolean hasMoreElement()

-------------------------|Object nextElement()

package cn.itcast_05;import java.util.Enumeration;import java.util.Vector;/* * Vector的特有功能 * 1 / 添加功能public void addElement(Object obj)2 / 获取功能public Object elementAt(int index)public Enumeration elements()-------------| boolean hasMoreElement()-------------|Object nextElement() */public class VectorDemo {public static void main(String[] args) {//创建集合对象Vector v = new Vector();//public void addElement(Object obj)   //添加功能v.addElement("hello");v.addElement("world");v.addElement("java");System.out.println(v);System.out.println("-----------------------");//遍历。public Object elementAt(int index)拿元素for(int x=0;x<v.size();x++){String s = (String) v.elementAt(x);System.out.println(s);}System.out.println("-----------------------");//public Enumeration elements()   类似迭代器Enumeration e =v.elements();   //返回的是实现类的对象while(e.hasMoreElements()){String s1 = (String) e.nextElement();System.out.println(s1);}}}

LinkedList的特有功能

A/ 添加功能:

public void addFirst(Object obj)   //在第一个元素位置添加

public void addLast(Object obj)   //在最后一个元素位置添加

B/ 获取功能

public Object getFirst();      //获取第一个元素

public Object getLast();      //获取最后一个元素

C/删除功能

public Object removeFirst()   //删除第一个元素并返回它

public Object removeLast()    //删除最后一个元素并返回它

范例:

package cn.itcast_06;import java.util.LinkedList;/* * LinkedList * A/ 添加功能:public void addFirst(Object obj)   //在第一个元素位置添加public void addLast(Object obj)   //在最后一个元素位置添加B/ 获取功能public Object getFirst();      //获取第一个元素public Object getLast();      //获取最后一个元素C/删除功能public Object removeFirst()   //删除第一个元素并返回它public Object removeLast()    //删除最后一个元素并返回它 */public class LinkedListDemo {public static void main(String[] args) {//创建集合对象LinkedList ll = new LinkedList();//创建字符串或对象并添加ll.add("hello");ll.add("world");ll.add("java");System.out.println(ll);  //[hello, world, java]//public void addFirst(Object obj)   //在第一个元素位置添加ll.addFirst("Android");System.out.println(ll);    //[Android, hello, world, java]//public void addLast(Object obj)   //在最后一个元素位置添加ll.addLast("javaEE");System.out.println(ll);  //[Android, hello, world, java, javaEE]//public Object getFirst();      //获取第一个元素System.out.println("getFirst:"+ll.getFirst());   //getFirst:Android//public Object getLast();      //获取最后一个元素System.out.println("getLast:"+ll.getLast());   //getLast:javaEE//public Object removeFirst()   //删除第一个元素并返回它System.out.println("removeFirst:"+ll.removeFirst());    //removeFirst:AndroidSystem.out.println(ll);    //[hello, world, java, javaEE]//public Object removeLast()    //删除最后一个元素并返回它System.out.println("removeLast:"+ll.removeLast());   //removeLast:javaEESystem.out.println(ll);    //[hello, world, java]}}

练习:去除ArrayList集合中的重复字符串元素

方法1:

package cn.itcast_07;import java.util.ArrayList;import java.util.Iterator;/* * 练习:去除ArrayList集合中的重复字符串元素 * 思路: *创建集合对象 *添加多个字符串元素,包含内容相同的 *创建新集合 *遍历旧集合,得到每一个元素 *拿这个元素到新集合中对比有无,有就放弃,没有就添加进新集合 *遍历新集合 * */public class ArrayListTest {public static void main(String[] args) {//创建集合对象ArrayList array = new ArrayList();//添加多个字符串元素,并包含内容相同的array.add("hello");array.add("world");array.add("java");array.add("hello");array.add("world");array.add("java");array.add("hello");array.add("hello");array.add("world");System.out.println(array);//创建新集合ArrayList array2 = new ArrayList();//遍历旧集合,获取每一个元素Iterator it = array.iterator();while(it.hasNext()){String s = (String) it.next();//对比新集合,没有就添加if(!array2.contains(s)){array2.add(s);}}//遍历新集合for(int x=0;x<array2.size();x++){String s = (String) array2.get(x);System.out.println(s);}}}
方法2:

package cn.itcast_07;import java.util.ArrayList;import java.util.Iterator;/* * 练习:去除ArrayList集合中的重复字符串元素 * 要求:不能创建新集合,就在原集合上进行操作 * 思路: *创建集合对象 *添加多个字符串元素,包含内容相同的 *参考选择排序方式,双重for嵌套。从0索引比较后面,再1索引比较后面。。。。。 *遍历新集合 * */public class ArrayListTest_02 {public static void main(String[] args) {//创建集合对象ArrayList array = new ArrayList();//添加多个字符串元素,并包含内容相同的array.add("hello");array.add("world");array.add("java");array.add("hello");array.add("world");array.add("java");array.add("hello");array.add("hello");array.add("world");System.out.println(array);//参考选择排序方式,双重for嵌套。从0索引比较后面,再1索引比较后面。。。。。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--;  //注意这个细节,当有连续的相同字符串时,需要重新检查删除元素的位置}}}//遍历集合Iterator it = array.iterator();while(it.hasNext()){String s =(String) it.next();System.out.println(s);}}}





0 0