Collection-List

Collection接口
--List接口:可重复,有序
----ArrayList类
--Set接口 :不可重复,无序

java.util.ArrayList:实现List接口,采用线性结构进行存储,可变长度的数组.
java.util.Vector:实现List接口,采用线性结构进行存储
ArrayList和Vector的区别:
* ArrayList:非线程安全的,效率较高
* Vector:线程安全,效率较低,如果在多线程程序中推荐使用Vector
不唯一,有序
使用场景:遍历或随机访问时效率较高,添加和删除元素需要大量移动位置,效率较低
常见操作:
添加:
*add(E e):将指定的元素添加到此列表的尾部。
*add(int index, E element):将指定的元素插入此列表中的指定位置。
查询:
*get(int index):返回此列表中指定位置上的元素。
删除:
*remove(int index):移除此列表中指定位置上的元素。
修改:
*set(int index, E element):用指定的元素替代此列表中指定位置上的元素。
其他:
*size():返回此列表中的元素数。
*isEmpty():如果此列表中没有元素,则返回 true

public class TestArrayList {
  public static void main(String[] args) {
    List list = new ArrayList();//向上转型
    System.out.println(list.isEmpty());
    list.add(10);
    list.add(13);
    list.add(15);
    list.add(10);
    //    System.out.println(list.size());
    for(int i=0;i<list.size();i++){
      System.out.println(list.get(i));//通过下标获取指定位置上的元素
    }
    System.out.println("-------------");
    //移除
    list.remove(1);
    list.add(2, 20);//将指定的元素插入此列表中的指定位置。
    list.set(3, 30);
    for (Object object : list) {
    System.out.println(object);
    }
    System.out.println(list.isEmpty());
  }
}

java.util.Iterator:对 collection 进行迭代的迭代器

  hasNext(): 如果仍有元素可以迭代,则返回 true。

  next() : 返回迭代的下一个元素

Collection常用方法:
  addAll(Collection<? extends E> c):将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
  iterator():返回在此 collection 的元素上进行迭代的迭代器。
  clear():移除此 collection 中的所有元素(可选操作)。
  contains(Object o):如果此 collection 包含指定的元素,则返回 true。

public class TestArrayList2 {
    public static void main(String[] args) {
        List list1 = new ArrayList();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        List list2 = new ArrayList();
        list2.add(4);
        list2.add(5);
        list2.add(6);
        list1.addAll(list2);//将list2中的元素添加到list1集合中
        //1.通过for循环获取元素
        //2.使用for-each获取元素
        //3.使用迭代器获取元素
        Iterator iter =  list1.iterator();//返回在此 collection 的元素上进行迭代的迭代器。
        //判断迭代器中是否存在下一个元素
        while(iter.hasNext()){
            Object obj = iter.next();//获取迭代的下一个元素
            System.out.println(obj);
        }
        System.out.println(list1.contains(2));//判断集合中是否存在指定的元素
        list1.clear();//移除list1中所有的元素
        System.out.println("------------国外习惯的一种写法---------");
        for(Iterator iter2 =  list1.iterator();iter2.hasNext();){
            Object obj = iter2.next();//获取迭代的下一个元素
            System.out.println(obj);
        }
    }
}

泛型:

  语法:List<E> list list=new ArrayList<E>();

  优点:

    避免获取元素时强制转型
    消除黄色警告.

将用户输入的5个整数转换成2进制输出:

public class TestArrayList3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
//        List list = new ArrayList();
//        list.add("hello");
        List<Integer> list = new ArrayList<Integer>();//list只能保持Integer类型
        for(int i=1;i<=5;i++){
            System.out.println("请输入第"+i+"个整数:");
            int num = input.nextInt();
            list.add(num);
        }
        Iterator<Integer> iter = list.iterator();
        while(iter.hasNext()){
//            Integer obj=(Integer)iter.next();
//            System.out.println(Integer.toBinaryString(obj));
            Integer n = iter.next();//因为使用泛型,不需要强制转换
            System.out.println(Integer.toBinaryString(n));
        }
    }

}

List接口继承了Collection接口
LinkedList类:实现了List接口,采用的链表结构进行存储。
   使用场景:
    添加删除元素时效率较高,遍历和随机访问时效率较低
   特有方法:
     addFirst(E e) 将指定元素插入此列表的开头。
    addLast(E e) 将指定元素添加到此列表的结尾。
    removeFirst() 移除并返回此列表的第一个元素。
    removeLast() 移除并返回此列表的最后一个元素。
    getFirst() 返回此列表的第一个元素。
    getLast() 返回此列表的最后一个元素。

public class TestLinkedList {
    public static void main(String[] args) {
//        List<String> list = new LinkedList<String>();//向上转型
        LinkedList<String> list = new LinkedList<String>();
        list.add("java");
        list.add("oracle");
        list.add("html");
        list.addFirst("C");
        list.addLast("jsp");
        list.add("mysql");
        list.add("struts2");
        list.removeFirst();
        list.removeLast();
        for (String string : list) {
            System.out.println(string);
        }
        System.out.println("*************");
        System.out.println("第一个元素:"+list.getFirst());
        System.out.println("最后一个元素:"+list.getLast());
    }
}

 List接口:
  --ArrayList
  --LinkedList
  --Vector
    ----Stack
java.util.Stack类:继承Vector类
    push(E item):把项压入堆栈顶部。
    pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
  栈:一种特殊存储结构,满足后进先出的特性,类似于生活中"弹夹"(第一个压进去的最一个弹出)
    先进后出(First In Last Out)-->FILO
    后进先出(Last In Frist Out)-->LIFO *
  操作:
    压栈:push
    出栈(弹栈):pop

public class MyStack {
    LinkedList list = new LinkedList();
    /**
     * 压栈的操作
     */
    public void push(Object obj){
//        list.addLast(obj);
        list.addFirst(obj);
    }

    /**
     * 出栈的操作
     * @return:返回并移除栈顶的元素
     */
    public Object pop(){
//        Object obj= = list.removeLast();
        Object obj =list.removeFirst();
        return obj;
    }

    public static void main(String[] args) {
//        Stack<String> stack = new Stack<String>();
//        stack.push("java");
//        stack.push("oracle");
//        stack.push("html");
//        for (int i = 0; i < 3; i++) {
//            String el=stack.pop();
//            System.out.println(el);
//        }
        MyStack stack = new MyStack();
        stack.push("java");
        stack.push("oracle");
        stack.push("html");
        for (int i = 0; i < 3; i++) {
            Object obj=stack.pop();
            System.out.println(obj);
        }
    }
}

时间: 2024-10-23 19:02:04

Collection-List的相关文章

SharePoint 2010/SharePoint 2013 Custom Action: 基于Site Collection 滚动文字的通知.

应用场景: 有时候我们的站点需要在每个页面实现滚动文字的通知,怎么在不修改Master Page的情况下实现这个功能?我们可以使用Javascript 和 Custom Action 来实现. 创建一个Custom Action.主要使用到 Location = 'ScriptLink' 属性, 该属性可以动态的加载JavaScript 文件链接和代码块到模板页.代码如下: <Elements xmlns="http://schemas.microsoft.com/sharepoint/&

从头认识java-15.2 Collection的常用方法

这一章节我们来介绍一下Collection的常用方法. 我们下面以ArrayList为例. package com.ray.ch14; import java.util.ArrayList; import java.util.Iterator; public class Test { public static void main(String[] args) { ArrayList<Integer> rtnList = new ArrayList<Integer>(); rtnL

Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析

1. 迭代器为什么不定义成一个类,而是定义为一个接口 ?  答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历.但是呢? 我们想想,Java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以,存储的方式和遍历的方式应该是不同的.进而它们的遍历方式也应该不是一样的,最终,就没有定义迭代器类.        而无论你是哪种集合,你都应该具备获取元素的操作,而且,最好在辅助于判断功能,这样,在获取前,先判断.这样的话就不容易出错.也就是说,判断功能和获取

一大波Java来袭(六)——Java集合之Collection和Iterator接口

本文主要介绍Collection和Iterator接口. 一.Collection和Iterator接口 Collection接口是List.Set..Queue的父接口. Collection  c = new ArrayList(); 父类指向子类对象!优点:多态.动态链接.向上转型. 面向接口编程,被调用者对于调用者是完全透明的,可以随意替换子类,屏蔽了子类特有的东西. Demo:详细请参加:Java API文档 二.如何依次遍历集合中的元素? 普通情况下,当我们把一个对象"丢进"

java Iterator Iterable Collection AbstractCollection Map关系

java.lang Interface Iterable<T>  实现该接口就可以使用for-each循环. java.util Interface Iterator<E>  用于遍历Collection,有hasNext(),next(),remove()方法. java.util Interface Collection<E>  整个Collection体系中的根接口,父类接口是Iterable.可以生成Iterator. java.util Interface M

Mapped Statements collection does not contain value for 问题的解决

在做SSM项目的时候,遇到MyBatis抛出的一个异常: Mapped Statements collection does not contain value for org.lyk.vo.mapping.NewsNS.findById. 2017-09-01 21:03:48,979 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - Refreshing org[email protecte

Mybatis 高级结果映射 ResultMap Association Collection

作者:ilovejava_2010 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程序,也将是非常棒的,但也没有.结果集映射就是MyBatis为解决这些问题而提供的解决方案.例如,我们如何映射下面这条语句? <!-- Very Complex Statement --> <select id="selectBlogDetails"

collection 源码

转自:http://blog.csdn.net/longlong2015/article/details/48174421 http://blog.csdn.net/mra__s__/article/details/55517204 JDK 1.7源码阅读笔记(三)集合类之LinkedList 标签: jdklinkedlist源码阅读 2015-09-02 09:58 644人阅读 评论(0) 收藏 举报  分类: JDK源码(6)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录

java集合之Collection架构

Java集合之Collection架构 首先,我们对Collection进行说明.下面先看看Collection的一些框架类的关系图: Collection是一个接口,它主要的两个分支是:List 和 Set.List和Set都是接口,它们继承于Collection.List是有序的队列,List中可以有重复的元素:而Set是数学概念中的集合,Set中没有重复元素!List和Set都有它们各自的实现类. 如ArrayList  LinkedList  Vector  Stack 为了方便,我们抽

我所理解Java集合框架的部分的使用(Collection和Map)

所谓集合,就是和数组类似--一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接口,长虚线表示抽象类,实线表示类,箭头表示实现接口或者继承)(在网络上找的图,不知道原作者,侵权请联系我删除)(总之,关系很复杂,所以不用记得这个图,只是用来吓吓人而已的). 下面贴上个人理解之精简版之Collection(集)和Map(地图?暂且这么理解吧),话说思维导图蛮好用,以下是两幅思维导图