栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

集合 collection 与 list

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

集合 collection 与 list

java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象,在程序运行时,java集合可以动态的进行扩展,随着元素的增加而扩大,在java中集合通常存在于java.util包中

这里说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化(存放在硬盘当中的数据)的存储(.txt或者jpg或者avi 等)

集合框架是怎样运行的

 java集合中分两个体系

Collection接口

Collection是 单列数据 ,定义了存取一组对象的方法的集合Collection中又分为List接口与Set接口

List接口: 元素有序,且可重复的集合 "动态数组"

接口实现:ArrayList,linkedList,Vector

Set接口:元素无序,且不可重复的集合  "去重"

接口实现: HashSet,linkedHashSet,TreeSet

Collection接口继承树:这里的实线表示继承关系,虚线表示实现关系

Map接口

Map是双列数据,保存具有映射关系  "key - value键值对的"集合

接口实现:HashMap,linkedHashMap,TreeMap ,Hashtable,Properties

list接口 什么是list接口:

 ArrayList:

ArrayList的特点:作为list接口的主要实现类,线程不安全,执行效率高 ,底层使用Object[]数组   的方式进行存储,,elementData 的方式进行存储、

jdk7:
ArrayList list = new ArrayList();//底层创建了长度是10 的Object[] 类型的数组elementData

list.add(123);//elementData[0] = new Integer(123);

。。。一直添加数据添加到第11位

list.add(11),如果此次的添加导致底层elementData数组容量不够,则扩容,默认情况下,扩容为原来的容量的1.5倍。同时需要将原有数组的数据复制到新的数组当中。

jdk8:

ArrayList list = new ArrayList();//底层为Object[ ] elementData 初始化为 { } 并没有创建长度为10 的数组

list .add(123);第一次调用add()时,底层才创建了长度为10的数组,并将数据123添加到elementData的数组当中,

后续的扩容和添加数据与jdk1.7一致

总结:jdk7中的ArrayList 的对象的创建类似于单列的饿汉式,而jdk8中的arrayList的对象的创建类似于单列式设计模式中的懒汉式,延迟了数组的创建,节省了内存

linkedList:

对于频繁的插入,删除操作,使用此类效率比ArraysList的效率要高,底层使用的是双向链表的方式进行存储

 

list与collection的常用API工具类
常用api功能(向集合中添加元素)
coll.add(E e)
向集合中添加一个元素
void add(int  index ,E element)在指定位置添加一个元素
coll.addAll(Collection c)将已经添加到集合中的元素添加到一个新的集合元素当中
coll.hashCode();返回当前对象的哈希值
 public void  test1(){
        Collection coll = new ArrayList();
//        add(Object e); 往Collection集合里面添加数据
        coll.add("AA");
        coll.add("BB");
        coll.add(123);
        coll.add(new Date());
//        size,获取添加元素的长度
        System.out.println(coll.size());
//        addAll(Collection coll1) :将Coll1集合中的元素添加到当前的集合中
        Collection coll1 = new ArrayList();
        coll1.add(456);
        coll1.add("CC");
        coll1.add(coll1);
        System.out.println(coll1.size());
//        clear():清空集合元素
        coll1.clear();

//        isEmpty():判断当前集合中的元素是否为空

        System.out.println(coll1.isEmpty());


}

判断功能API
boolean is  Empty();判断集合是否为空
bolean  contains(object obj)判断集合中是否存在指定的元素
bolean  containsAll(Collection  c)判断集合中是否存在指定的一个集合中的元素

修改API
E  set(int  index ,E  element )把指定索引位置的元素修改为指定的指,并且返回修改之前的值

Iterator接口遍历:迭代

获取功能
E  get(int  index)获取指定位置的元素
Iterator  iterator()就是用来获取集合中每一个元素

public class IteratorTest {
//    hasNext(),判断是否还有下一个元素,调用hasNext的时候指针没有下移
//   iterator.next(),1指针下移,2将下以一会集合位置上的元素进行返回
    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(1234);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);

        Iterator iterator = coll.iterator();
//        for (int i= 0; i< coll.size(); i++){
          通过for循环的方式  获取添加对象中的所有的集合
//            System.out.println(iterator.next());
//        }
//异常报错:NoSuchElementExceprion,跳出循环
//       最合适的方法,通过迭代的方式进行实现
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }


    }
    

删除功能API
void clear();删除集合中的所有元素
E  remove (int   index)根据指定索引删除元素,并把删除的元素进行返回
boolean  remove(Object  o)从集合中删除指定的元素
boolean  removeAll(Collection) c );从集合中删除一个指定的集合元素

 

   @Test
    public void  test2(){
//        内部定义remove(),可以在遍历的时候,删除集合中的元素,此方法不同于集合直接调用remove()
        
 Collection coll = new ArrayList();
        coll.add(123);
        coll.add(1234);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
//删除集合中"Tom"的数据
        Iterator iterator = coll.iterator();
       while (iterator.hasNext()){
           Object next = iterator.next();
           if ("Tom".equals(next)){
               iterator.remove();
           }

       }
//       遍历集合中的数据
        Iterator iterator1 = coll.iterator();
        while (iterator1.hasNext()){
           System.out.println(iterator1.next());
       }

    }

获取长度功能
int  size();获取集合中元素的个数
  Collection coll1 = new ArrayList();
        coll1.add(456);
        coll1.add("CC");
        coll1.add(coll1);
//        传入集合中三个元素
        System.out.println(coll1.size());//所以这里打印的结果4

把集合转换成数组
Object[]  to Array(); 把集合变成数组

Arrays.asList()

将数组转换为集合,调用Arrays类的静态方法asList(),注意:转换int类型时,会默认将int类型的可变型参当做一个元素 ,而不是当作几个元素
      将集合变成数组
        Object[] coll3 = coll1.toArray();
        for (Object o : coll3) {
            System.out.println(o);//[456, CC, (this Collection), 1, 2, 0]打印结果
        }

foreach循环遍历集合

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658127.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号