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   

步骤 1 :

增加

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 :

判断是否存在

通过方法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 :

获取指定位置的对象

通过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 :

获取对象所处的位置

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"))); } }
步骤 5 :

删除

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); } }
步骤 6 :

替换

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); } }
步骤 7 :

获取大小

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()); } }
步骤 8 :

转换为数组

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 :

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

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); } }
步骤 10 :

清空

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 :

练习-判断是否相同

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

答案-判断是否相同

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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

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

答案-MyStringBuffer

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-07-06 public void append(char c) { append(String.valueOf(c)); }
清水浩
public void append(char c) { append(String.valueOf(c)); } 感觉用这个还好理解一些。 public void append(char c) { al.add(c); }








答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2018-05-31 new Hero("hero " + i) 括号内的参数是什么意思?
llittle
对应的参数 不是应该调用含对应参数的构造方法吗? 并且这个参数 有连接符 把字符串和一个整数变量 结合起来。。




3 个答案

Little_Monkey 答案时间:2018-06-14
就是hero 1 2 3 4 5 啊- -

南哥 答案时间:2018-06-05
llittle 答案时间:2018-06-02
问了群里的朋友 得到解答 加号是字符串连接符 所以 传的字符型参数是 ”字符串加整数“




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




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

上传截图