集合 collection 与 list

集合 collection 与 list,第1张

集合 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());


}

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

修改APIE  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());
        }


    }
    

删除功能APIvoid 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循环遍历集合

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存