1.参数传递:Java的参数是以值传递的形式传入方法中,而不是引用传递。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。
可以看到下面的代码中,如果在new Dog("B")之前setName,此时原dog的name就会被改变,这是因为传入的地址并没有被改变;
但如果new完一个新的dog地址后,在对他进行修改,此时原dog的name并不会被改变,所以他是以值形式传递进入的
//PassByValueExample类
public class PassByValueExample {
public static void main(String[] args) {
Dog dog = new Dog("A");
System.out.println(dog.getObjectAddress());//basic.参数传递.Dog@1540e19d
func(dog);
System.out.println(dog.getObjectAddress());//basic.参数传递.Dog@1540e19d
System.out.println(dog.getName());//A C
}
private static void func(Dog dog){
System.out.println(dog.getObjectAddress());//basic.参数传递.Dog@1540e19d
dog.setName("C");//如果不new一个dog,这是原地址的dog对象名会被改变
dog = new Dog("B");//此时定义了新的dog对象,后续地址会改变
System.out.println(dog.getObjectAddress());//basic.参数传递.Dog@677327b6
System.out.println(dog.getName());
dog.setName("D");
System.out.println(dog.getObjectAddress());//basic.参数传递.Dog@677327b6
System.out.println(dog.getName()); //D
}
}
//Dog类
public class Dog {
String name;
Dog(String name){
this.name = name;
}
String getName(){
return this.name;
}
void setName(String name){
this.name = name;
}
String getObjectAddress(){
return super.toString();
}
}
2.List——ArrayList和LinkedList
使用ArrayList和LinkedList需要import 相关的包
ArrayList——没有固定大小的限制,我们可以添加或删除元素
适用于频繁访问列表中的某一个元素,或只需要在列表末尾进行添加和删除元素的操作。
LinkedList——链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
适用于你需要通过循环迭代来访问列表中的某些元素,或需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素的操作。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
public class List类 {
public static void main(String[] args) {
// ArrayListMeth();
LinkedListMeth();
}
static void ArrayListMeth(){
// ArrayList objectName =new ArrayList<>(); // 初始化 E为数据类型
ArrayList sites = new ArrayList<>();
sites.add("Google");
sites.add("Runoob");
sites.add("TaoBao");
sites.add("Weibo");
// System.out.println(sites);
// System.out.println(sites.get(0)); //获取元素
for(String s:sites) System.out.println(s);
ArrayList num = new ArrayList<>();
num.add(10);
num.add(40);
num.add(30);
num.add(20);
Collections.sort(num);
for(int i:num) System.out.println(i);
// boolean Boolean
// byte Byte
// short Short
// int Integer
// long Long
// float Float
// double Double
// char Character
// add() 将元素插入到指定位置的 arraylist 中
// addAll() 添加集合中的所有元素到 arraylist 中
// clear() 删除 arraylist 中的所有元素
// clone() 复制一份 arraylist
// contains() 判断元素是否在 arraylist
// get() 通过索引值获取 arraylist 中的元素
// indexOf() 返回 arraylist 中元素的索引值
// removeAll() 删除存在于指定集合中的 arraylist 里的所有元素
// remove() 删除 arraylist 里的单个元素
// size() 返回 arraylist 里元素数量
// isEmpty() 判断 arraylist 是否为空
// subList() 截取部分 arraylist 的元素
// set() 替换 arraylist 中指定索引的元素
// sort() 对 arraylist 元素进行排序
// toArray() 将 arraylist 转换为数组
// toString() 将 arraylist 转换为字符串
// ensureCapacity() 设置指定容量大小的 arraylist
// lastIndexOf() 返回指定元素在 arraylist 中最后一次出现的位置
// retainAll() 保留 arraylist 中在指定集合中也存在的那些元素
// containsAll() 查看 arraylist 是否包含指定集合中的所有元素
// trimToSize() 将 arraylist 中的容量调整为数组中的元素个数
// removeRange() 删除 arraylist 中指定索引之间存在的元素
// replaceAll() 将给定的操作内容替换掉数组中每一个元素
// removeIf() 删除所有满足特定条件的 arraylist 元素
// forEach() 遍历 arraylist 中每一个元素并执行特定操作
// 以下情况使用 ArrayList :
// 频繁访问列表中的某一个元素。
// 只需要在列表末尾进行添加和删除元素操作。
}
static void LinkedListMeth(){
LinkedList sites = new LinkedList<>();
sites.add("Weibo");
sites.add("Runoob");
sites.addFirst("Wiki");
System.out.println(sites);
System.out.println(sites.poll());
// 以下情况使用 LinkedList :
// 你需要通过循环迭代来访问列表中的某些元素。
// 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
// public boolean add(E e) 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
// public void add(int index, E element) 向指定位置插入元素。
// public boolean addAll(Collection c) 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。
// public boolean addAll(int index, Collection c) 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。
// public void addFirst(E e) 元素添加到头部。
// public void addLast(E e) 元素添加到尾部。
// public boolean offer(E e) 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
// public boolean offerFirst(E e) 头部插入元素,返回是否成功,成功为 true,失败为 false。
// public boolean offerLast(E e) 尾部插入元素,返回是否成功,成功为 true,失败为 false。
// public void clear() 清空链表。
// public E removeFirst() 删除并返回第一个元素。
// public E removeLast() 删除并返回最后一个元素。
// public boolean remove(Object o) 删除某一元素,返回是否成功,成功为 true,失败为 false。
// public E remove(int index) 删除指定位置的元素。
// public E poll() 删除并返回第一个元素。
// public E remove() 删除并返回第一个元素。
// public boolean contains(Object o) 判断是否含有某一元素。
// public E get(int index) 返回指定位置的元素。
// public E getFirst() 返回第一个元素。
// public E getLast() 返回最后一个元素。
// public int indexOf(Object o) 查找指定元素从前往后第一次出现的索引。
// public int lastIndexOf(Object o) 查找指定元素最后一次出现的索引。
// public E peek() 返回第一个元素。
// public E element() 返回第一个元素。
// public E peekFirst() 返回头部元素。
// public E peekLast() 返回尾部元素。
// public E set(int index, E element) 设置指定位置的元素。
// public Object clone() 克隆该列表。
// public Iterator descendingIterator() 返回倒序迭代器。
// public int size() 返回链表元素个数。
// public ListIterator listIterator(int index) 返回从指定位置开始到末尾的迭代器。
// public Object[] toArray() 返回一个由链表元素组成的数组。
// public T[] toArray(T[] a) 返回一个由链表元素转换类型而成的数组。
}
}
3.哈希相关——HashSet和HashMap
使用HashSet和HashMap也需要import 相关的包。
HashSet——是一个不允许有重复元素的集合
HashMap——是一个散列表,它存储的内容是键值对(key-value)映射
import java.util.HashMap;
import java.util.HashSet;
public class 哈希类 {
public static void main(String[] args) {
// HashSetMeth();
HashMapMeth();
}
static void HashSetMeth(){
HashSet sites = new HashSet<>();
sites.add("Weibo");
sites.add("RedBook");
// sites.add("Weibo"); //不会重复添加相同的元素
System.out.println(sites);
}
static void HashMapMeth(){
// HashMap 是一个散列表,它存储的内容是键值对(key-value)映射
HashMap sites = new HashMap<>();
sites.put(1,"Weibo");
sites.put(2,"RedBook");
sites.put(3,"Runoob");
// System.out.println(sites);
// System.out.println(sites.get(1));
for(Integer i:sites.keySet()) System.out.println("key:"+i+"value:"+sites.get(i));
for(String value:sites.values()) System.out.print(value+",");
// boolean Boolean
// byte Byte
// short Short
// int Integer
// long Long
// float Float
// double Double
// char Character
}
}