集合(2)

一、ArrayList类

1.1、ArrayList类概述

ArrayList类概述
底层数据结构是数组,查询快,增删慢
线程不安全,效率高

1.2、成员方法

与之前提到List类大致相同。

1.3、练习

①存储字符串并遍历:

public static void main(String[] args) {
        ArrayList arr = new ArrayList();
        arr.add("hello");
        arr.add("world");
        arr.add("java");
        Iterator iterator = arr.iterator();
        while(iterator.hasNext()){
            String s = (String)iterator.next();
            System.out.println(s);
        }
        for(int i=0;i<arr.size();i++){
            System.out.println(arr.get(i));
        }
    }

②存储自定义对象并遍历

 public static void main(String[] args) {
        Student s1 = new Student("张三",23);
        Student s2 = new Student("李四",30);
        Student s3 = new Student("王五",18);
        ArrayList arr = new ArrayList();
        arr.add(s1);
        arr.add(s2);
        arr.add(s3);
        Iterator it = arr.iterator();
        while(it.hasNext()){
            Student s = (Student)it.next();
            System.out.println(s);
        }
        for(int i=0;i<arr.size();i++){
            Student s = (Student)arr.get(i);
            System.out.println(s);
        }
    }

二、Vector类

2.1、Vector类概述

底层数据结构是数组,查询快,增删慢
线程安全,效率低

2.2、Vector类特有功能

public void addElement(E obj)        //相当于add
public E elementAt(int index)       //相当于get
public Enumeration elements()       //相当于迭代器,iterator
public static void main(String[] args) {
        Vector ve = new Vector();
        ve.addElement("hello");
        ve.addElement("world");
        ve.addElement("java");
        for (int i = 0; i < ve.size(); i++) {
            String s = (String) ve.elementAt(i);
            System.out.println(s);
        }
        System.out.println("=================");
        Enumeration elements = ve.elements();
        while(elements.hasMoreElements()){
            String s=(String)elements.nextElement();
            System.out.println(s);
        }
    }

2.3、练习

存储自定义对象并遍历:

public static void main(String[] args) {
        Student s1 = new Student("张三",23);
        Student s2 = new Student("李四",24);
        Student s3= new Student("王五",25);
        Vector v = new Vector();
        v.addElement(s1);
        v.addElement(s2);
        v.addElement(s3);
        Enumeration elements = v.elements();
        while(elements.hasMoreElements()){
            Student s =(Student)elements.nextElement();
            System.out.println(s);
        }
    }

三、LinkedList类

3.1、LinkedList类概述

底层数据结构是链表,查询慢,增删快
线程不安全,效率高

3.2、LinkedList类特有功能

public void addFirst(E e)
addLast(E e)
public E getFirst()
getLast()
public E removeFirst()
public E removeLast()
public static void main(String[] args) {
        LinkedList lk = new LinkedList();
        lk.add("hello");
        lk.add("world");
        lk.add("java");
        lk.addFirst("123");
        lk.addLast("456");
        System.out.println(lk);
        System.out.println("==========");
        Object first = lk.getFirst();
        String s1=(String)first;
        Object last = lk.getLast();
        String s2=(String)last;
        System.out.println(s1+"==="+s2);
        System.out.println("===========");
        lk.removeFirst();
        lk.removeLast();
        System.out.println(lk);
    }

3.3、练习

①存储字符串并遍历

public static void main(String[] args) {
        LinkedList lk = new LinkedList();
        lk.add("hello");
        lk.add("world");
        lk.add("java");
        Iterator it = lk.iterator();
        while(it.hasNext()){
            String s=(String)it.next();
            System.out.println(s);
        }
    }

②存储自定义对象并遍历

public static void main(String[] args) {
        Student s1 = new Student("张三",23);
        Student s2 = new Student("李四",24);
        Student s3 = new Student("王五",26);
        LinkedList linkedList = new LinkedList();
        linkedList.add(s1);
        linkedList.add(s2);
        linkedList.add(s3);
        Iterator it = linkedList.iterator();
        while(it.hasNext()){
            Student s=(Student)it.next();
            System.out.println(s);
        }
    }

③去除集合中字符串的重复值(字符串的内容相同)
方式一:

public static void main(String[] args) {
        ArrayList arr1 = new ArrayList();
        arr1.add("hello");
        arr1.add("hello");
        arr1.add("hello");
        arr1.add("world");
        arr1.add("world");
        arr1.add("java");
        ArrayList arr2 = new ArrayList();
        Iterator it = arr1.iterator();
        while(it.hasNext()){
            String s=(String)it.next();
            if(!arr2.contains(s)){
                arr2.add(s);
            }
        }
        System.out.println(arr2);
    }

方式二:

public static void main(String[] args) {
        ArrayList arr = new ArrayList();
        arr.add("hello");
        arr.add("hello");
        arr.add("hello");
        arr.add("world");
        arr.add("world");
        arr.add("java");
        for(int i=0;i< arr.size()-1;i++){
            for(int j=i+1;j<arr.size();j++){
                if(arr.get(i).equals(arr.get(j))){
                    arr.remove(j);
                    j--;
                }
            }
        }
        System.out.println(arr);
    }

④去除集合中自定义对象的重复值

public static void main(String[] args) {
        Student s1 = new Student("张三",23);
        Student s2 = new Student("李四",30);
        Student s3 = new Student("王五",18);
        Student s4 = new Student("张三",23);
        Student s5 = new Student("李四",30);
        ArrayList arrayList1 = new ArrayList();
        arrayList1.add(s1);
        arrayList1.add(s2);
        arrayList1.add(s3);
        arrayList1.add(s4);
        arrayList1.add(s5);
        ArrayList arrayList2 = new ArrayList();
        Iterator it = arrayList1.iterator();
        while(it.hasNext()){
            Student s=(Student)it.next();
            if(!arrayList2.contains(s)){
                arrayList2.add(s);
            }
        }
        System.out.println(arrayList2);
    }

⑤请用LinkedList模拟栈数据结构的集合,并测试

public class MyStack {
   private LinkedList link;
   public MyStack(){
       link=new LinkedList();
   }
    public void add(Object obj){
        link.addFirst(obj);
    }
    public Object get(){
        return link.removeFirst();
    }
    public boolean isEmpty(){
       return link.isEmpty();
    }
}
public class MyStackTest {
    public static void main(String[] args) {
        MyStack ms = new MyStack();
        ms.add("hello");
        ms.add("world");
        ms.add("java");
        while(!ms.isEmpty()){
            System.out.println(ms.get());
        }
    }
}

四、泛型

4.1、泛型由来

早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
例如:

 public static void main(String[] args) {
        ArrayList arr = new ArrayList();
        arr.add("hello");
        arr.add("world");
        arr.add("java");
        arr.add(new Integer(100));
        Iterator it = arr.iterator();
        while(it.hasNext()){
            String s=(String)it.next();//ClassCastException
            System.out.println(s);
        }
    }

4.2、泛型应用

泛型类
把泛型定义在类上
格式:public class 类名<泛型类型1,…>
注意:泛型类型必须是引用类型
泛型方法
把泛型定义在方法上
格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
泛型接口
把泛型定义在接口上
格式:public interface 接口名<泛型类型1…>

4.3、泛型通配符

泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
? extends E
向下限定,E及其子类
? super E
向上限定,E及其父类

五、增强for概述及使用

增强for概述
简化数组和Collection集合的遍历
格式:

for(元素数据类型 变量 : 数组或者Collection集合) {
	使用变量即可,该变量就是元素
    }

好处:简化遍历
注意事项:增强for的目标要判断是否为null

public static void main(String[] args) {
        int[] arr={11,22,33,44,55};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        System.out.println("================");
        for(int i:arr){
            System.out.println(i);
        }
    }
 public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("hello");
        arrayList.add("world");
        arrayList.add("java");
        if(arrayList!=null){
            for (String s : arrayList) {
                System.out.println(s);
            }
        }
    }

六、静态导入概述及使用

静态导入概述
格式:import static 包名….类名.方法名;
可以直接导入到方法的级别
注意事项
方法必须是静态的
如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。

七、可变参数概述及使用

可变参数概述
定义方法的时候不知道该定义多少个参数
格式

修饰符 返回值类型 方法名(数据类型…  变量名){}

注意:
这里的变量其实是一个数组
如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

Arrays工具类中的一个方法(把数组转换成集合)
public static <T> List<T> asList(T... a)
public static void main(String[] args) {
        String[] arr={"hello","world","java"};
        List<String> list= Arrays.asList(arr);
        for(String s:list){
            System.out.println(s);
        }
    }

八、List集合练习

8.1、集合的嵌套遍历

public static void main(String[] args) {
        ArrayList<ArrayList<Student>> bigarr = new ArrayList<ArrayList<Student>>();
        ArrayList<Student> arr1 = new ArrayList<Student>();
        Student s1 = new Student("唐僧",23);
        Student s2 = new Student("猪八戒",28);
        Student s3 = new Student("孙悟空",30);
        arr1.add(s1);
        arr1.add(s2);
        arr1.add(s3);
        ArrayList<Student> arr2 = new ArrayList<Student>();
        Student s4 = new Student("周瑜",23);
        Student s5 = new Student("诸葛亮",28);
        arr2.add(s4);
        arr2.add(s5);
        bigarr.add(arr1);
        bigarr.add(arr2);
        for(ArrayList<Student> array:bigarr){
            for(Student s:array){
                System.out.println(s);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值