码迷,mamicode.com
首页 > 其他好文 > 详细

集合详解

时间:2019-11-02 11:25:07      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:eof   ++   i++   tac   javascrip   基本   asc   stack   存储   

微信公众号:非科班的科班
关注可获得更多的Java教程。问题或建议,请公众号留言;
如果你觉得文章对你有帮助,欢迎赞赏[1]

集合

概念:
  • 用来存放一组数据的数据结构
数组的缺点:
  • 长度不可变
  • 在前面增删数据,操作繁琐
集合提供了简便的数据操作方法

1.1 集合的继承结构

Collection 接口
  |- List 接口
      |- ArrayList
      |- LinkedList
  |- Set 接口
      |- HashSet
      |- TreeSet

Map 接口
  |- HashMap
  |- TreeMap

2 LinkedList

链表
  • 两端效率高
方法:
add(数组)
添加数据 
get(int i)    //获取指定位置数据
remove(int i) //删除指定位置的数据,返回被删除的数据
remove(数据)  //找到第一个相等数据删除,返回true,表示找到数据并删除,否则返回false 
size()       //数据的数量
iterator()   //辅助创建迭代器实例的方法
两端操作数据的方法
addFirst(), addLast()
getFirst(), getLast()
removeFirst(), removeLast()
队列操作 Queue
offer()      addLast()
peek()       getFirst()
poll()       removeFirst()
栈操作 Stack
push()       addFirst()
pop()        removeFirst()

练习代码:

package demo;

import java.util.LinkedList;

public class Test {
public static void main(String[] args) {
    /*
     * <> 泛型
     * 限制集合中存放的数据类型
     *
     * 泛型和集合,不支持基本类型
     * 可以使用包装类型
     */
    LinkedList<String> list = new LinkedList<String>();     
    list.add("aaa");
    list.add("ttt");
    list.add("jjj");
    list.add("111");
    list.add("ccc");
    list.add("kkk");
    list.add("aaa");
    list.add("xxx");
    System.out.println(list.size());//数据量
    System.out.println(list);
    System.out.println(list.get(0));//访问第一个值
    System.out.println(list.get(list.size()-1));//尾部值
    System.out.println(list.remove(3));//删除下标3位置
    System.out.println(list);
    System.out.println(list.remove("aaa"));//删除aaa
    System.out.println(list);

    //双向链表下标遍历效率低
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }

}
}

ArrayList

  • 内部封装一个数组,用数组来存储数据
  • 内部数组的默认初始容量 10,存满后 1.5倍增长
new ArrayList()
  • 可以指定更大的初始容量,来提高效率
new ArrayList(1000)
  • 访问任意位置效率高
  • 增删数据,效率可能会降低

方法和 LinkedList 相同,但没有两端操作数据的方法

add()
get()
remove()
remove()
size()
iterator()

ArrayList 和 LinkedList

  • 只在两端操作数据,选择 LinkedList

练习代码:

package demo;

import java.util.ArrayList;
import java.util.Iterator;

public class Test {
public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(222);
    list.add(333);
    list.add(666);
    list.add(444);
    list.add(444);
    list.add(888);
    list.add(555);
    System.out.println(list.size());
    System.out.println(list);
    System.out.println(list.get(3));
    System.out.println(list.remove(3));
    System.out.println(list);
    System.out.println(
        list.remove(Integer.valueOf(222)));
    System.out.println(list);

    //下标遍历
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }

    //迭代器遍历
    Iterator<Integer> it = list.iterator();
    while(it.hasNext()) {
        Integer a = it.next();
        System.out.println(a);
    }

}
}

微信公众号:非科班的科班
关注可获得更多的Java教程。问题或建议,请公众号留言;
如果你觉得文章对你有帮助,欢迎赞赏[1]

技术图片

 

 

集合详解

标签:eof   ++   i++   tac   javascrip   基本   asc   stack   存储   

原文地址:https://www.cnblogs.com/liduchang/p/11781126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!