一、ArrayList集合的方法

        1、public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。
2、public E get(int index) :返回集合中指定位置的元素。
3、public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
4、public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素 AarrayList方法中add()方法添加元素时的扩容源码
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1); //扩容倍数:new = old + old/2
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
} 例子:
public class ListTest { // private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 长度为0的空数组 // private int size; 集合的长度 // transient Object[] elementData 集合存储元素的数组 public static void main(String[] args) {
List<Integer> array = new ArrayList<>();
array.add(1);
array.add(4);
array.add(2);
array.add(7);
System.out.println(array.get(3));
System.out.println(array.set(1,8));
System.out.println("排序....");
/*
array.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
*/
//使用lambda表达式简写
array.sort((a,b)->{
return b-a;
});
System.out.println(array);
}
}

二、linkeList集合的add()方法的源码

  private static class Node<E> {
E item; //数据
Node<E> next; //前一个节点
Node<E> prev; //后一个节点 Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
} public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ transient int size = 0; //集合元素个数 transient Node<E> first; //第一个节点 transient Node<E> last; //最后一个节点 例如:集合已有 a、b两个节点,现在添加 c节点 void linkLast(E e) {
final Node<E> l = last; //没有new c节点前,b为last 节点
final Node<E> newNode = new Node<>(l, e, null); //先在new c节点,那么相对c节点而言,b节点为则为前节点
last = newNode; //然后将c节点视为最后节点
if (l == null)
first = newNode;
else
l.next = newNode; //那么相对b节点而言,c节点为则为后节点
size++;
modCount++;
}
} linkeList自身特有的方法:
public void addFirst(E e) :将指定元素插入此列表的开头。
public void addLast(E e) :将指定元素添加到此列表的结尾。
public E getFirst() :返回此列表的第一个元素。
public E getLast() :返回此列表的最后一个元素。
public E removeFirst() :移除并返回此列表的第一个元素。
public E removeLast() :移除并返回此列表的最后一个元素。
public E pop() :从此列表所表示的堆栈处弹出一个元素。
public void push(E e) :将元素推入此列表所表示的堆栈。
public boolean isEmpty() :如果列表不包含元素,则返回true

三、Set集合中HashSet集合

        java.util.HashSet<E> implements Set<E>
HashSet特点:
1.不允许存储重复元素
2.没有索引,所以不能使用普通的for循环遍历
3.无序集合,存储元素和取出元素的顺序不一致
4.底层是一个哈希表,查询效率快
JDK1.8前:组数 + 链表
JDK1.8后:组数 + 链表/红黑树(链表节点数超过8时),为了提高查询效率 哈希值:是一个十进制的整数,(就是对象的一个临时逻辑虚拟地址,不是真实的物理地址)
在object类有一个方法,可以获取哈希值
int hashCode():返回对象的哈希值,不重写的情况下是由系统自动分配的 例子:
public class HashSetTest {
public static void main(String[] args) {
HashSet hashSet = new HashSet(); Student stu1 = new Student("ab");
Student stu2 = new Student("ab"); hashSet.add(stu1);
hashSet.add(stu2); hashSet.add("ab"); System.out.println(stu1.hashCode()); System.out.println(stu2.hashCode()); System.out.println(hashSet);
}
} 图解:

四、Set集合中LinkeHashSet集合

        java.util.LinkeHashSet<E> extends HashSet<E>
LinkeHashSet特点:
1.LinkeHashSet集合底层哈希表 + 链表(保证迭代顺序)
1.LinkeHashSet集合:有序,不可重复 例子:
public class LinkeHashSetTest {
public static void main(String[] args) {
LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(2);
linkedHashSet.add(4);
linkedHashSet.add(6);
linkedHashSet.add(2);
System.out.println(linkedHashSet);
}
}

五、Properties集合

         java.util.Properties集合 extends Hashtable<k,v> implements Map<k,v>
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。
Properties集合是一个唯一和IO流相结合的集合
可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用 属性列表中每个键及其对应值都是一个字符串。
Properties集合是一个双列集合,key和value默认都是字符串 使用Properties集合存储数据,遍历取出Properties集合中的数据
Properties集合是一个双列集合,key和value默认都是字符串
Properties集合有一些操作字符串的特有方法
Object setProperty(String key, String value) 调用 Hashtable 的方法 put。
String getProperty(String key) 通过key找到value值,此方法相当于Map集合中的get(key)方法
Set<String> stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串,此方法相当于Map集合中的keySet方法 例子: public class PropertiesTest {
public static void main(String[] args) {
Properties prop = new Properties();
//使用setProperty往集合中添加数据
prop.setProperty("赵丽颖","168");
prop.setProperty("迪丽热巴","165");
prop.setProperty("古力娜扎","160"); //使用stringPropertyNames把Properties集合中的键取出,存储到一个Set集合中
Set<String> set = prop.stringPropertyNames();
for (String s : set) {
System.out.println(s);
System.out.println(prop.getProperty(s));
}
}
}

java基础之集合(List)、Properties集合的更多相关文章

  1. Java基础(十三):集合

    一.Java 集合框架: 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组.虽然这些类都非常 ...

  2. Java基础知识总结之类的集合

    Java集合概述 1.集合类也叫作容器类.它的功能相当于一个容器.可以存储数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组). 2.Java的集合(容器),它是用来”装对象的“(实际上是 ...

  3. java基础(十四)集合(一)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  4. java基础笔记(9)----集合之list集合

    集合 对于集合的理解,集合是一个容器,用于存储和管理其它对象的对象 集合,首先了解所有集合的父接口----collection 特点:存储任意object元素 方法 boolean add(Objec ...

  5. Java基础学习笔记十五 集合、迭代器、泛型

    Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都 ...

  6. Java基础学习笔记十六 集合框架(二)

    List List接口的特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的. 它是一个带有索引的集合,通过索引就可以精 ...

  7. JAVA基础部分复习(二、集合类型)

    对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...

  8. java基础笔试题二(集合关系)

    知识点:java集合继承关系(Collection,Map) 1.集合框架体系图 2.java的集合层次 来自博客(http://blog.csdn.net/stubbornaccepted/arti ...

  9. JAVA基础知识总结15(集合容器)

    集合框架:用于存储数据的容器. 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1: ...

  10. java基础笔记(10)----集合之set集合

    set接口特点: 存储任意Object元素 无序,无下标,元素内容不可以重 方法: 继承父接口Collection中的所有方法 遍历: 有两种遍历方法,foreach遍历和迭代遍历 forEach遍历 ...

随机推荐

  1. python的typing模块

    python的typing模块 参考:3个提高 Python 开发效率的小工具.Python3 Typing模块详解 typeing模块在python中提供类型支持,主要功能有: 类型检查,防止运行时 ...

  2. Jetbrains系列产品无限时间重置插件

    概述Jetbrains家的产品有一个很良心的地方,他会允许你试用30天(这个数字写死在代码里了)以评估是否你真的需要为它而付费. 事实上有一款插件可以实现这个功能,你或许可以用它来重置一下试用时间.但 ...

  3. 安全可信 | 通过双项测试!TeleDB实力亮剑!

    近日,天翼云TeleDB数据库在中国信通院"可信数据库"系列测试的赛道上,一次性跨越"分布式事务型数据库基础能力测试"与"性能测试"的双重大 ...

  4. [SDOI2008] Sandy的卡片 题解

    讲一种自认为最暴力的方法. 首先肯定还是用差分的思想,对于每一张卡片进行重新标号,在卡片串与卡片串中插入特殊字符,然后找重复了 \(n\) 次的子串. 这里我们对于每一个子串开一个大小为 \(n\) ...

  5. [HEOI2014]大工程 题解

    发现可以直接建立虚树. 设 \(dp_{u,0/1/2}\) 表示第 \(u\) 个节点的子树内,所有选中节点到它的距离之和/选中节点中到它的最短距离/选中节点中到它的最长距离,\(as_{u,0/1 ...

  6. intellij debug模式提示 Method breakpoints may dramatically slow down debugging 解决办法

    直接上图........ 点击图中按钮  或者 快捷键(Ctrl - Shift -F8 ) 出现下图  

  7. Typecho如何添加微博表情包

    自从添加了蛆音娘表情包就想着去爬点其他地方的表情包- 使用教程跟蛆音娘一样 :点我查看 #表情包代码: "微博":{ "type": "usr&quo ...

  8. JavaGUI - [03] LayoutManager布局管理器

      Component中有一个方法setBounds()可以设置当前容器的位置和大小,但如果我们手动为组件设置位置和大小的话,就会造成程序的不通用性.LayoutManager布局管理器可以根据运行平 ...

  9. 「四」vim执行外部命令、文件另存为、文件提取合并、打开类命令、光标后插入内容、替換、复制粘贴、查找设置

    vim执行外部命令 查看当前目录文件::! command 另存为 完整内容: :w filename 选择性内容: v:选择内容. :w filename 文件提取合并 向当前文件插入文件内容: : ...

  10. CICFlowMeter 使用方法

    前言 因实验需要提取流量特征,就找到了这个较为著名的流量特征提取工具 CICFlowMeter .例如 CIC-IDS-2017 数据集就是通过这个工具提取而来. 网络上的教程众说纷纭,但我始终是无法 ...