1 Hash集合存储学生对象并遍历
需求:创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合
要求:学生对象的成员变量值相同,我们救人为是同一个对象
思路
1、定义学生类
2、创建HshSet集合对象
3、创建学生对象
4、把学生添加到集合
5、遍历集合(增强for)
6、在学生类中重写两个方法
(1)hashCode() 和 equals()
(2)自动生成即可
2 实现
2.1 方案一
Student.java
package HashSetDemo;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
HashSetDemo02.java
package HashSetDemo;
import java.util.HashSet;
public class HashSetDemo02 {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<>();
Student s1 = new Student("灰太狼", 20);
Student s2 = new Student("懒洋洋", 21);
Student s3 = new Student("导演", 22);
Student s4 = new Student("导演", 23);
hs.add(s1);
hs.add(s2);
hs.add(s3);
hs.add(s4);
for (Student s : hs) {
System.out.println(s.getName() + "," + s.getAge());
}
}
}
2.2 优化
Generate–> equals() and hashCode() 然后一直确定即可
Student.java
package HashSetDemo;
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
<h2><a id="1_Hash_0"></a>1 Hash集合存储学生对象并遍历</h2>
<p>需求:创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合</p>
<p>要求:学生对象的成员变量值相同,我们救人为是同一个对象</p>
<p><strong>思路</strong></p>
<p>1、定义学生类</p>
<p>2、创建HshSet集合对象</p>
<p>3、创建学生对象</p>
<p>4、把学生添加到集合</p>
<p>5、遍历集合(增强for)</p>
<p>6、在学生类中重写两个方法</p>
<p>(1)hashCode() 和 equals()</p>
<p>(2)自动生成即可</p>
<h2><a id="2__25"></a>2 实现</h2>
<h3><a id="21__26"></a>2.1 方案一</h3>
<p>Student.java</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> HashSetDemo;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">Student</span> {
<span class="hljs-keyword">private</span> String name;
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> age;
<span class="hljs-comment">// 无参构造</span>
<span class="hljs-keyword">public</span> <span class="hljs-title function_">Student</span><span class="hljs-params">()</span> {
}
<span class="hljs-comment">// 带参构造</span>
<span class="hljs-keyword">public</span> <span class="hljs-title function_">Student</span><span class="hljs-params">(String name, <span class="hljs-type">int</span> age)</span> {
<span class="hljs-built_in">this</span>.name = name;
<span class="hljs-built_in">this</span>.age = age;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getName</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> name;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setName</span><span class="hljs-params">(String name)</span> {
<span class="hljs-built_in">this</span>.name = name;
}
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">getAge</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> age;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setAge</span><span class="hljs-params">(<span class="hljs-type">int</span> age)</span> {
<span class="hljs-built_in">this</span>.age = age;
}
}
</code></div></pre>
<p>HashSetDemo02.java</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> HashSetDemo;
<span class="hljs-keyword">import</span> java.util.HashSet;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">HashSetDemo02</span> {
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> {
<span class="hljs-comment">// 创建HashSet集合对象</span>
HashSet<Student> hs = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashSet</span><>();
<span class="hljs-comment">// 创建学生对象</span>
<span class="hljs-type">Student</span> <span class="hljs-variable">s1</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Student</span>(<span class="hljs-string">"灰太狼"</span>, <span class="hljs-number">20</span>);
<span class="hljs-type">Student</span> <span class="hljs-variable">s2</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Student</span>(<span class="hljs-string">"懒洋洋"</span>, <span class="hljs-number">21</span>);
<span class="hljs-type">Student</span> <span class="hljs-variable">s3</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Student</span>(<span class="hljs-string">"导演"</span>, <span class="hljs-number">22</span>);
<span class="hljs-type">Student</span> <span class="hljs-variable">s4</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Student</span>(<span class="hljs-string">"导演"</span>, <span class="hljs-number">23</span>);
<span class="hljs-comment">// 把学生添加到集合</span>
hs.add(s1);
hs.add(s2);
hs.add(s3);
hs.add(s4);
<span class="hljs-comment">// 遍历集合(增强for)</span>
<span class="hljs-keyword">for</span> (Student s : hs) {
System.out.println(s.getName() + <span class="hljs-string">","</span> + s.getAge());
}
}
}
</code></div></pre>
<h3><a id="22__96"></a>2.2 优化</h3>
<p>Generate–> equals() and hashCode() 然后一直确定即可<br />
Student.java</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> HashSetDemo;
<span class="hljs-keyword">import</span> java.util.Objects;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">Student</span> {
<span class="hljs-keyword">private</span> String name;
<span class="hljs-keyword">private</span> <span class="hljs-type">int</span> age;
<span class="hljs-comment">// 无参构造</span>
<span class="hljs-keyword">public</span> <span class="hljs-title function_">Student</span><span class="hljs-params">()</span> {
}
<span class="hljs-comment">// 带参构造</span>
<span class="hljs-keyword">public</span> <span class="hljs-title function_">Student</span><span class="hljs-params">(String name, <span class="hljs-type">int</span> age)</span> {
<span class="hljs-built_in">this</span>.name = name;
<span class="hljs-built_in">this</span>.age = age;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getName</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> name;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setName</span><span class="hljs-params">(String name)</span> {
<span class="hljs-built_in">this</span>.name = name;
}
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">getAge</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> age;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setAge</span><span class="hljs-params">(<span class="hljs-type">int</span> age)</span> {
<span class="hljs-built_in">this</span>.age = age;
}
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-type">boolean</span> <span class="hljs-title function_">equals</span><span class="hljs-params">(Object o)</span> {
<span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span> == o) <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
<span class="hljs-keyword">if</span> (o == <span class="hljs-literal">null</span> || getClass() != o.getClass()) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
<span class="hljs-type">Student</span> <span class="hljs-variable">student</span> <span class="hljs-operator">=</span> (Student) o;
<span class="hljs-type">return</span> <span class="hljs-variable">age</span> <span class="hljs-operator">=</span>= student.age &&
Objects.equals(name, student.name);
}
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">hashCode</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> Objects.hash(name, age);
}
}
</code></div></pre>
留言