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工具类
向集合中添加一个元素
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()); }
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()); } }
@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()); } }
Collection coll1 = new ArrayList(); coll1.add(456); coll1.add("CC"); coll1.add(coll1); // 传入集合中三个元素 System.out.println(coll1.size());//所以这里打印的结果4
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循环遍历集合
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)