/**
* @author Jason
* @create 2020-07-07 9:45
* 集合常用方法
*/
public class CollectionTest01 {
public static void main(String[] args) {
System.out.println("学习集合常用方法");
Collection collection = new ArrayList();
//下面是自动装箱,其实效果和collection.add(2);是一样的
Integer a = new Integer(2);
collection.add(a);
//往集合中添加元素
collection.add(1);
collection.add("java");
collection.add(new Object());
collection.add(3.14);
collection.add(true);
//判断集合中元素的个数
System.out.println("collection集合的大小:"+collection.size());
System.out.println(collection);
//删除集合中的某个元素
collection.remove("java");
System.out.println(collection);
//判断当前集合中是否包含元素o
boolean flag = collection.contains(2);
System.out.println(flag);
//判断集合中元素是否为0
System.out.println(collection.isEmpty());
//将集合转换成数组
Object[] objs = collection.toArray();
for (int i = 0; i < objs.length; i++) {
Object o = objs[i];
System.out.println(o);
}
//清空集合
collection.clear();
System.out.println(collection.size());
}
}
//集合的遍历
//第一步:获取迭代器对象
Iterator iterator = collection.iterator();
//第二步:使用迭代器对象遍历集合
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
/**
* @author Jason
* @create 2020-07-07 10:59
*/
public class CollectionTest03 {
public static void main(String[] args) {
Collection c = new ArrayList();
String str1 = new String("a");
c.add(str1);
String str2 = new String("b");
c.add(str2);
String str3 = new String("c");
c.add(str3);
System.out.println("集合中元素的个数:" + c.size());
//创建一个新的对象
String s = new String("a");
//判断c集合中是否包含s引用所指向的对象 true
System.out.println(c.contains(s));
}
}
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
/**
* @author Jason
* @create 2020-07-07 21:35
* contains底层探索
*/
public class CollectionTest04 {
public static void main(String[] args) {
Collection collection = new ArrayList();
User user1 = new User("jason");
collection.add(user1);
User user2 = new User("jason");
//false 原因在于user没有重写equals,调用的是object类的equals方法
// 他们比较的是对象的内存地址
// object底层的equals方法
//public boolean equals(Object obj) {
// return (this == obj);
//}
//不重写equals方法的时候,返回的是false,如果重写了equals方法则返回true
System.out.println(collection.contains(user2));
}
}
class User{
private String name;
public User(){}
public User(String name) {
this.name = name;
}
//重写equals方法(只要姓名一样就表示同一个用户)他就会按照重写的equals方法进行比较
public boolean equals(Object o) {
if (o==null || !(o instanceof User)) {
return false;
}
if (o == this) {
return true;
}
User u = (User)o;
return u.name.equals(this.name);
}
}
public class CollectionTest05 {
public static void main(String[] args) {
Collection collection = new ArrayList();
Integer x = new Integer(1000);
collection.add(x);
Integer y = new Integer(1000);
System.out.println(collection.contains(y));
}
}
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
/**
* @author Jason
* @create 2020-07-07 21:35
* remove方法底层探索
*/
public class CollectionTest06 {
public static void main(String[] args) {
//创建集合
Collection c = new ArrayList();
//创建字符串对象
String s1 = new String("jason");
c.add(s1);
String s2 = new String("jason");
c.remove(s2);
System.out.println(c.size());
}
}
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
/**
* @author Jason
* @create 2020-07-07 21:35
* contains底层探索
*/
public class CollectionTest04 {
public static void main(String[] args) {
Collection collection = new ArrayList();
User user1 = new User("jason");
collection.add(user1);
User user2 = new User("jason");
collection.remove(user2);
System.out.println("没有重写equals方法的remove:"+collection.size());
}
}
class User{
private String name;
public User(){}
public User(String name) {
this.name = name;
}
//重写equals方法(只要姓名一样就表示同一个用户)
/*public boolean equals(Object o) {
if (o==null || !(o instanceof User)) {
return false;
}
if (o == this) {
return true;
}
User u = (User)o;
return u.name.equals(this.name);
}*/
}
/**
* @author Jason
* @create 2020-07-08 16:31
*/
public class CollectionTest05 {
public static void main(String[] args) {
//创建集合
Collection c = new ArrayList();
//添加数据
c.add(1);
c.add(2);
c.add(3);
c.add(4);
//创建迭代器
Iterator it = c.iterator();
while (it.hasNext()) {
Object o = it.next();
//集合删除元素,没有通知迭代器,迭代器不知道集合发生了变化。
c.remove(o);
//it.remove();
System.out.println(o);
}
System.out.println("删除后集合大小:"+c.size());
}
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at CollectionTest05.main(CollectionTest05.java:21)
1
2
3
4