how2j.cn

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



11分56秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



关键字 简介 示例代码
add
增加
示例代码
contains
判断是否存在
示例代码
get
获取指定位置的对象
示例代码
indexOf
获取对象所处的位置
示例代码
remove
删除
示例代码
set
替换
示例代码
size
获取大小
示例代码
toArray
转换为数组
示例代码
addAll
把另一个容器所有对象都加进来
示例代码
clear
清空
示例代码
练习-判断是否相同
示例代码
答案-判断是否相同
示例代码
练习-MyStringBuffer
示例代码
答案-MyStringBuffer
示例代码
步骤 1 : 增加   
步骤 2 : 判断是否存在   
步骤 3 : 获取指定位置的对象   
步骤 4 : 获取对象所处的位置   
步骤 5 : 删除   
步骤 6 : 替换   
步骤 7 : 获取大小   
步骤 8 : 转换为数组   
步骤 9 : 把另一个容器所有对象都加进来   
步骤 10 : 清空   
步骤 11 : 练习-判断是否相同   
步骤 12 : 答案-判断是否相同   
步骤 13 : 练习-MyStringBuffer   
步骤 14 : 答案-MyStringBuffer   

add 有两种用法
第一种是直接add对象,把对象加在最后面

heros.add(new Hero("hero " + i));

第二种是在指定位置加对象

heros.add(3, specialHero);
增加
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 把5个对象加入到ArrayList中 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } System.out.println(heros); // 在指定位置增加对象 Hero specialHero = new Hero("special hero"); heros.add(3, specialHero); System.out.println(heros.toString()); } }
package charactor; public class Hero { public String name; public float hp; public int damage; public Hero() { } // 增加一个初始化name的构造方法 public Hero(String name) { this.name = name; } // 重写toString方法 public String toString() { return name; } }
步骤 2 :

判断是否存在

edit
通过方法contains 判断一个对象是否在容器中
判断标准: 是否是同一个对象,而不是name是否相同
判断是否存在
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); System.out.println(heros); // 判断一个对象是否在容器中 // 判断标准: 是否是同一个对象,而不是name是否相同 System.out.print("虽然一个新的对象名字也叫 hero 1,但是contains的返回是:"); System.out.println(heros.contains(new Hero("hero 1"))); System.out.print("而对specialHero的判断,contains的返回是:"); System.out.println(heros.contains(specialHero)); } }
步骤 3 :

获取指定位置的对象

edit
通过get获取指定位置的对象,如果输入的下标越界,一样会报错
获取指定位置的对象
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); //获取指定位置的对象 System.out.println(heros.get(5)); //如果超出了范围,依然会报错 System.out.println(heros.get(6)); } }
步骤 4 :

获取对象所处的位置

edit
indexOf用于判断一个对象在ArrayList中所处的位置
contains一样,判断标准是对象是否相同,而非对象的name值是否相等
获取对象所处的位置
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); System.out.println(heros); System.out.println("specialHero所处的位置:"+heros.indexOf(specialHero)); System.out.println("新的英雄,但是名字是\"hero 1\"所处的位置:"+heros.indexOf(new Hero("hero 1"))); } }
remove用于把对象从ArrayList中删除
remove可以根据下标删除ArrayList的元素

heros.remove(2);

也可以根据对象删除

heros.remove(specialHero);
删除
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); System.out.println(heros); heros.remove(2); System.out.println("删除下标是2的对象"); System.out.println(heros); System.out.println("删除special hero"); heros.remove(specialHero); System.out.println(heros); } }
set用于替换指定位置的元素
替换
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); System.out.println(heros); System.out.println("把下标是5的元素,替换为\"hero 5\""); heros.set(5, new Hero("hero 5")); System.out.println(heros); } }
size 用于获取ArrayList的大小
获取大小
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); System.out.println(heros); System.out.println("获取ArrayList的大小:"); System.out.println(heros.size()); } }
toArray可以把一个ArrayList对象转换为数组。
需要注意的是,如果要转换为一个Hero数组,那么需要传递一个Hero数组类型的对象给toArray(),这样toArray方法才知道,你希望转换为哪种类型的数组,否则只能转换为Object数组
转换为数组
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); System.out.println(heros); Hero hs[] = (Hero[])heros.toArray(new Hero[]{}); System.out.println("数组:" +hs); } }
步骤 9 :

把另一个容器所有对象都加进来

edit
addAll 把另一个容器所有对象都加进来
把另一个容器所有对象都加进来
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } System.out.println("ArrayList heros:\t" + heros); //把另一个容器里所有的元素,都加入到该容器里来 ArrayList anotherHeros = new ArrayList(); anotherHeros.add(new Hero("hero a")); anotherHeros.add(new Hero("hero b")); anotherHeros.add(new Hero("hero c")); System.out.println("anotherHeros heros:\t" + anotherHeros); heros.addAll(anotherHeros); System.out.println("把另一个ArrayList的元素都加入到当前ArrayList:"); System.out.println("ArrayList heros:\t" + heros); } }
clear 清空一个ArrayList
清空
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } System.out.println("ArrayList heros:\t" + heros); System.out.println("使用clear清空"); heros.clear(); System.out.println("ArrayList heros:\t" + heros); } }
步骤 11 :

练习-判断是否相同

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
如果就是要判断集合里是否存在一个 name等于 "hero 1"的对象,应该怎么做?
练习-判断是否相同
步骤 12 :

答案-判断是否相同

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

1分31秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


答案-判断是否相同
package collection; import java.util.ArrayList; import charactor.Hero; public class TestCollection { public static void main(String[] args) { ArrayList heros = new ArrayList(); // 初始化5个对象 for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i)); } Hero specialHero = new Hero("special hero"); heros.add(specialHero); String name = "hero 1"; for (int i = 0; i < heros.size(); i++) { Hero h = (Hero) heros.get(i); if(name.equals(h.name ) ){ System.out.printf("找到了name是%s的对象",name); break; } } } }
步骤 13 :

练习-MyStringBuffer

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
做一个一样的MyStringBuffer练习,但是不使用字符数组,而是使用ArrayList来实现
步骤 14 :

答案-MyStringBuffer

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

12分24秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package character; import java.util.ArrayList; public class MyStringBuffer implements IStringBuffer { // int capacity = 16;//不需要自己维护capacity,capacity在ArrayList中由ArrayList维护 // int length = 0; //不需要自己维护length,length ArrayList的size ArrayList value; public MyStringBuffer() { value = new ArrayList(); } // 有参构造方法 public MyStringBuffer(String str) { this(); if (null == str) return; char[] cs = str.toCharArray(); for (int i = 0; i < cs.length; i++) { char c = cs[i]; value.add(c); } } @Override public void append(String str) { insert(value.size(), str); } @Override public void append(char c) { append(String.valueOf(c)); } @Override public void insert(int pos, char b) { insert(pos, String.valueOf(b)); } @Override public void delete(int start) { delete(start, value.size()); } @Override public void delete(int start, int end) { // 边界条件判断 if (start < 0) return; if (start > value.size()) return; if (end < 0) return; if (end > value.size()) return; if (start >= end) return; for (int i = 0; i < end - start; i++) { value.remove(start); } } @Override public void reverse() { for (int i = 0; i < value.size() / 2; i++) { int length = value.size(); char temp = (char) value.get(i); value.set(i, value.get(length - i - 1)); value.set(length - i - 1, temp); } } @Override public int length() { // TODO Auto-generated method stub return value.size(); } @Override public void insert(int pos, String b) { // 边界条件判断 if (pos < 0) return; if (pos > value.size()) return; if (null == b) return; // 无需手动扩容 char[] cs = b.toCharArray(); for (int i = 0; i < cs.length; i++) { char c = cs[i]; value.add(pos + i, c); } } public String toString() { char[] charValue = new char[value.size()]; for (int i = 0; i < value.size(); i++) { charValue[i] = (char) value.get(i); } return new String(charValue); } public static void main(String[] args) { MyStringBuffer sb = new MyStringBuffer("there light"); System.out.println(sb); sb.insert(0, "let "); System.out.println(sb); sb.insert(10, "be "); System.out.println(sb); sb.insert(0, "God Say:"); System.out.println(sb); sb.append("!"); System.out.println(sb); sb.append('?'); System.out.println(sb); sb.reverse(); System.out.println(sb); sb.reverse(); System.out.println(sb); sb.delete(0, 4); System.out.println(sb); sb.delete(4); System.out.println(sb); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2019-05-16 交作业!
御馔津



contains 比较
public class Test1 {
	public static void main(String[] args) {
		ArrayList arr = new ArrayList();  //创建集合
		arr.add("张三");   //添加内容
		arr.add("李四");
		System.out.println(arr.size());  //输出长度为2
		
		ArrayList<String> arr2 = new ArrayList<>();  创建泛型类型集合
		arr2.addAll(arr);   //添加arr集合内容
		arr2.add("王五");
		System.out.println(arr2);   
		System.out.println(arr2.indexOf(arr));    
		arr2.set(0, "李大");   //更换
		System.out.println(arr2);
		System.out.println(arr2.contains("张三"));  //false
		System.out.println(arr2.contains("李大"));  //true
	}
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-05-14 记录下本人问题
杨康
1.remove的对象不存在 会不会报错 2.addAll 对象类型不同意 会不会报错







回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2019-05-13 交作业-第二题
2019-05-13 关于 print(heros) 和 print(to.String())
2019-05-11 第一题
2019-05-03 第二题
2019-04-29 旋转跳跃
2019-04-25 MyStringBuffer得不到预期结果
2019-04-16 便利集合使用迭代器比较好一点,毕竟某些集合使用循环会破坏里面的数据
2019-04-16 集合便利应该使用迭代器 Iterator<> ,毕竟某些集合用循环便利会出问题
2019-04-11 交作业
2019-04-01 判断是否相同
2019-03-28 为什么我toString()得到的是地址?
2019-03-27 第一题,为什么两个结果不一样?
2019-03-19 作业二
2019-03-19 第一题作业
2019-03-16 交作业,用foreach
2019-03-01 remove(i)中i为整型的问题
2019-02-01 第一题
2019-01-23 第一题
2019-01-15 锤锤锤
2018-12-06 作业
2018-08-23 我用toString方法获得名字为啥不行
2018-08-01 如何判断容器中不存在要找的对象?
2018-07-06 public void append(char c) { append(String.valueOf(c)); }
2018-05-31 new Hero("hero " + i) 括号内的参数是什么意思?
2018-05-03 【交作业】 MyStringBuffer
2018-04-25 arrayindexoutofboundsexception错误
2018-04-02 站长,第一题可以用contains判断String泛型
2018-03-27 交作业
2018-03-27 答案中的强制转换好像有问题
2018-03-09 Hero hs[] = (Hero[])heros.toArray(new Hero[]{});
2018-03-07 练习--判断是否相同
2018-02-02 老师您好,请问步骤14中,MyStringBuffer实现的那个类 IStringBuffer在哪?
2018-01-03 为什么重写了equals();方法,contain比较返回的还是false?
2017-12-10 步骤12的第19行代码Hero h = (Hero) heros.get(i); 为什么heros前面要加(Hero)?
2017-07-30 亲爱的站长大大~~为什么播放视频一点击,就跑到迅雷下载了
2017-07-22 为什么要对toArray返回值强转呢
2017-07-14 老师,为什么步骤2 new hero("hero 1")返回的是true啊
2017-05-21 为什么输出的是对象的name而不是对象的地址啊
2016-09-08 为什么hero1的位置会是-1?
2016-07-29 提问




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-集合框架-常用方法 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 1001964108
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图