Day 2/100 – Java Practice Challenge 🚀 Continuing my #100DaysOfCode journey with an important core Java concept. 🔹 Topics Covered: Object Class Methods – equals() & hashCode() Understanding how Java compares objects and how collections like HashSet handle duplicates. 💻 Practice Code: 🔸 Comparing two different objects class Employee { int id; Employee(int id){ this.id = id; } @Override public boolean equals(Object obj){ if(this == obj) return true; if(obj == null || getClass() != obj.getClass()) return false; Employee e = (Employee) obj; return this.id == e.id; } @Override public int hashCode(){ return id; } } 🔸 Testing with HashSet Employee e1 = new Employee(1); Employee e2 = new Employee(1); HashSet<Employee> set = new HashSet<>(); set.add(e1); set.add(e2); System.out.println(set.size()); // Output: 1 📌 Key Learning: Two objects can have different memory addresses but still be logically equal equals() → used to compare object values (business logic) hashCode() → used to find bucket location in hashing collections 👉 If two objects are equal, their hashCode must be the same ⚠️ Important: Overriding equals() without hashCode() can break HashSet/HashMap behavior 🔥 Interview Insight: == compares memory address equals() compares logical content #100DaysOfCode #Java #JavaDeveloper #CodingJourney #LearningInPublic #Programming
Java equals() and hashCode() Methods Explained
More Relevant Posts
-
🚀 Day 3/100 – Java Practice Challenge Continuing my #100DaysOfCode journey with another important core Java concept. 🔹 Topics Covered: Generics in Java Understanding type safety, reusability, and avoiding runtime errors. 💻 Practice Code: 🔸 Generic Class Example class Box { private T value; public void set(T value) { this.value = value; } public T get() { return value; } } 🔸 Usage Box intBox = new Box<>(); intBox.set(10); Box strBox = new Box<>(); strBox.set("Hello"); System.out.println(intBox.get()); // 10 System.out.println(strBox.get()); // Hello 📌 Key Learning: ✔ Generics provide compile-time type safety ✔ Avoid ClassCastException ✔ Help write reusable and clean code ⚠️ Important: • Use <?> for unknown types (wildcards) • Use for bounded types • Generics work only with objects, not primitives 🔥 Interview Insight: Generics use type erasure — type information is removed at runtime Widely used in collections like List, Map<K, V> 👉 Without Generics: List list = new ArrayList(); list.add("Java"); list.add(10); // No compile-time error ❌ #100DaysOfCode #Java #JavaDeveloper #Generics #CodingJourney #LearningInPublic #Programming
To view or add a comment, sign in
-
📘 Day 30 & 31 – Java Concepts: Static & Inheritance Over the past two days, I strengthened my understanding of important Java concepts like Static Members and Inheritance, which are essential for writing efficient and reusable code. 🔹 Static Concepts • Static members belong to the class, not objects • Static methods cannot directly access instance variables • Static blocks execute once when the class is loaded • Used mainly for initialization of static variables 🔹 Execution Flow • Static variables & static blocks run first when the class loads • Instance block executes after object creation • Constructor runs after instance block 🔹 Inheritance • Mechanism where one class acquires properties of another • Achieved using the "extends" keyword • Promotes code reusability and reduces development time 🔹 Key Rules • Private members are not inherited • Supports single and multilevel inheritance • Multiple inheritance is not allowed in Java (avoids ambiguity) • Cyclic inheritance is not permitted 🔹 Types of Inheritance • Single • Multilevel • Hierarchical • Hybrid (achieved using interfaces) 💡 Key Takeaway: Understanding static behavior and inheritance helps in building structured, maintainable, and scalable Java applications. #Java #OOP #Programming #LearningJourney #Coding #Developers #TechSkills
To view or add a comment, sign in
-
-
🚀 Understanding Java Collections: ArrayDeque vs LinkedList & ArrayList vs ArrayDeque When working with Java Collections, choosing the right data structure can significantly impact performance and efficiency. Let’s break down two commonly compared pairs 👇 🔹 ArrayDeque vs LinkedList ✅ ArrayDeque Resizable array-based implementation Faster for stack (LIFO) and queue (FIFO) operations No capacity restrictions Better cache locality → improved performance Does not allow null elements ✅ LinkedList Doubly linked list implementation Efficient insertions/deletions at any position (no shifting needed) Higher memory usage (stores node pointers) Allows null elements Slower iteration compared to ArrayDeque 👉 Key Takeaway: Use ArrayDeque for high-performance queue/stack operations. Use LinkedList when frequent insertions/deletions in the middle are required. 🔹 ArrayList vs ArrayDeque ✅ ArrayList Dynamic array implementation Fast random access (O(1)) Best suited for index-based operations Slower insertions/deletions in the middle (shifting required) ✅ ArrayDeque Designed for queue and stack operations Faster add/remove from both ends No direct index access More efficient than ArrayList for FIFO/LIFO use cases 👉 Key Takeaway: Use ArrayList when you need fast access by index. Use ArrayDeque when you need efficient queue or stack operations. 💡 Pro Tip: Always choose a data structure based on your use case — not just familiarity. Performance differences matter in real-world applications! #Java #DataStructures #CodingInterview #JavaCollections #Programming #SoftwareEngineering TAP Academy
To view or add a comment, sign in
-
-
Most explanations of Multithreading in Java barely scratch the surface. You’ll often see people talk about "Thread" or "Runnable", and stop there. But in real-world systems, that’s just the starting point—not the actual practice. At its core, multithreading is about running multiple tasks concurrently—leveraging the operating system to execute work across CPU time slices or multiple cores. Think of it like cooking while attending a stand-up meeting. Different tasks, progressing at the same time. In Java, beginners are introduced to: - Extending the "Thread" class - Implementing the "Runnable" interface But here’s the reality: 👉 This is NOT how production systems are built. In company-grade applications, developers rely on the "java.util.concurrent" package and more advanced patterns: 🔹 Thread Pools (Executor Framework) Creating threads manually is expensive. Thread pools reuse a fixed number of threads to efficiently handle many tasks using "ExecutorService". 🔹 Synchronization When multiple threads access shared resources, you must control access to prevent inconsistent data. This is where "synchronized" comes in. 🔹 Locks & ReentrantLock For more control than "synchronized", developers use "ReentrantLock"—allowing manual lock/unlock, try-lock, and better flexibility. 🔹 Race Conditions One of the biggest problems in multithreading. When multiple threads modify shared data at the same time, results become unpredictable. 🔹 Thread Communication (Condition) Threads don’t just run—they coordinate. Using "Condition", "wait()", and "notify()", threads can signal each other and work together. --- 💡 Bottom line: Multithreading is not just about creating threads. It’s about managing concurrency safely, efficiently, and predictably. That’s the difference between writing code… and building scalable systems. #Java #Multithreading #BackendEngineering #SoftwareEngineering #Concurrency #Tech
To view or add a comment, sign in
-
🚀Stream API in Java - Basics Every Developer Should Know When I started using Stream API, I realized how much cleaner and more readable Java code can become. 👉Stream API is used to process collections of data in a functional and declarative way. 💡What is a Stream? A stream is a sequence of elements that support operations like: ->filtering ->mapping ->sorting ->reducing 💠Basic Example List<String> list = Arrays.asList("Java", "Python", "Javascript", "C++"); list.stream().filter(lang-> lang.startsWith("J")) .forEach(System.out : : println); 👉 outputs :Java, Javascript 💠Common Stream Operations ☑️filter() -> selects elements ☑️map() -> transforms data ☑️sorted() -> sorts elements ☑️forEach() -> iterates over elements ☑️collect() -> converts stream back to collection 💠Basic Stream Pipeline A typical stream works in 3 steps: 1. Source -> collection 2. Intermediate Operations -> filter, map 3. Terminal operation -> forEach, collect ⚡Why Stream API? . Reduces boilerplate code . Improves readability . Encourages functional programming . Makes data processing easier ⚠️Important Points to remember . Streams don't store data, they process it . Streams are consumed once . Operations are lazy (executed only when needed) And Lastly streams API may seem confusing at first, but with practice it becomes a go-to tool for working with collections. #Java #StreamAPI #JavaDeveloper #Programming #SoftwareEngineering #BackendDevelopment #LearningInPublic
To view or add a comment, sign in
-
-
🚀 Day 34 of Java Deep Dive: Mastering Sets & Maps! I just finished a comprehensive deep dive into the Java Collections Framework, specifically focusing on the internal workings and specialized implementations of Sets and Maps. Understanding these data structures is the key to writing efficient, production-grade Java code. Here’s a breakdown of what I covered: • Set Hierarchy & Internal Methods: Explored how Set inherits its power from the Collection and Iterable interfaces. Interestingly, Set doesn't define many unique methods—it leverages the robust ones already in Collection like add(), remove(), and contains() • TreeSet Under the Hood: It’s not just a simple interface. TreeSet actually implements NavigableSet and SortedSet, providing advanced navigation features like finding the closest matches or sub-sets • The Power of Maps: Went beyond the standard HashMap to explore: • EnumMap: Highly optimized for when keys are Enums • IdentityHashMap: A unique case that uses == (reference equality) instead of .equals() • ConcurrentHashMap: The modern go-to for thread-safe operations, offering better performance than the legacy Hashtable by avoiding full map locking • Optimization Secrets: Learned how Java internally optimizes HashMap to handle collisions and maintain high performance • Topic - Key Insight Set Interface - Inherits all core functionality from the Collection interface. TreeSet Hierarchy - Implements NavigableSet and SortedSet for ordering. Internal Storage - Sets internally use a HashMap (default bucket size of 16). ConcurrentHashMap - Preferred over Hashtable for multi-threaded environments. Specialized Maps - Covered EnumMap, IdentityHashMap, and WeakHashMap. Feeling much more confident in choosing the right tool for the right job in Java! Huge thanks to Aditya Tandon and Rohit Negi from CoderArmy for the incredible depth in this series. #Java #SoftwareEngineering #JavaCollections #CodingJourney #BackendDevelopment #CoderArmy
To view or add a comment, sign in
-
-
Are you still creating threads manually in Java? Previously I covered Thread, Runnable, and Callable, now I have dived deeper into ExecutorService, Thread Pools, and CompletableFuture—the tools we actually use in real-world systems. In this blog, I’ve explained: ✓ What Thread Pools are and why they matter ✓ How to use ExecutorService for better performance & control ✓ How CompletableFuture enables clean, non-blocking async code ✓ Practical Java examples you can apply immediately → Check it out and let me know your thoughts! #Java #Multithreading #Concurrency #BackendDevelopment #SpringBoot #SoftwareEngineering
Mastering Java Multithreading (Part 2): Thread Pools, ExecutorService & CompletableFuture medium.com To view or add a comment, sign in
-
Topic of the day Java Memory Management? 💡 Java Memory Management Understanding JVM memory becomes easy when you connect it with real code 🔹 1. Heap Memory (Objects Storage) This is where all objects are created and stored. 👉 Example: Student s = new Student(); ✔ new Student() → object is created in Heap ✔ s (reference) → stored in Stack 📌 Real-time: Like storing data in a database, Heap holds actual objects. 🔹 2. Stack Memory (Method Execution) Each thread has its own stack which stores method calls and local variables. 👉 Example: public void display() { int x = 10; } ✔ display() method → pushed into Stack ✔ x → stored in Stack ✔ After method ends → removed automatically 📌 Real-time: Like a call stack in your mobile – recent calls come and go. 🔹 3. Method Area / Metaspace (Class-Level Data) Stores class metadata, static variables, and constant pool. 👉 Example: class Test { static int count = 100; } ✔ count → stored in Method Area ✔ Class structure → also stored here 📌 Real-time: Like a blueprint shared across the entire application. 🔹 4. PC Register (Program Counter) Keeps track of the current instruction of a thread. 👉 Example: System.out.println("Hello"); System.out.println("Java"); ✔ PC Register tracks which line is currently executing 📌 Real-time: Like a cursor pointing to the current line in your code editor. 🔹 5. Native Method Stack (JNI Execution) Used when Java interacts with native (C/C++) code. 👉 Example: System.loadLibrary("nativeLib"); ✔ Native methods execution handled here 📌 Real-time: Like calling an external system/service from your application. 🧠 Quick Revision Trick: Objects → Heap Variables & Methods → Stack Static & Class Info → Method Area Execution Line → PC Register External Code → Native Stack #Java #JVM #MemoryManagement #JavaDeveloper #Backend #Coding #Programming #SpringBoot #Coding
To view or add a comment, sign in
-
🚀 Day 17/100: Securing & Structuring Java Applications 🔐🏗️ Today was a Convergence Day—bringing together core Java concepts to understand how to build applications that are not just functional, but also secure, scalable, and well-structured. Here’s a snapshot of what I explored: 🛡️ 1. Access Modifiers – The Gatekeepers of Data In Java, visibility directly impacts security. I strengthened my understanding of how access modifiers control data exposure: private → Restricted within the same class (foundation of encapsulation) default → Accessible within the same package protected → Accessible within the package + subclasses public → Accessible from anywhere This reinforced the idea that controlled access = better design + safer code. 📋 2. Class – The Blueprint A class defines the structure of an application: Variables → represent state Methods → define behavior It’s a logical construct—a blueprint that doesn’t occupy memory until instantiated. 🚗 3. Object – The Instance Objects are real-world representations of a class. Using the new keyword, we create instances that: Occupy memory Hold actual data Perform defined behaviors One class can create multiple objects, each with unique states—this is the essence of object-oriented programming. 🔑 4. Keywords – The Building Blocks of Java Syntax Java provides 52 reserved keywords that define the language’s structure and rules. They are predefined and cannot be used as identifiers, ensuring consistency and clarity in code. 💡 Key Takeaway: Today’s learning emphasized that writing code is not enough—designing it with proper structure, access control, and clarity is what makes it professional. 📈 Step by step, I’m moving from writing programs to engineering solutions. #Day17 #100DaysOfCode #Java #OOP #Programming #SoftwareDevelopment #LearningJourney #Coding#10000coders
To view or add a comment, sign in
-
I recently explored a subtle but important concept in Java constructor execution order. Many developers assume constructors simply initialize values, but the actual lifecycle is more complex. In this article, I explain: • The real order of object creation • Why overridden methods can behave unexpectedly • A common bug caused by partial initialization This concept is especially useful for interviews and writing safer object-oriented code. Medium Link: https://lnkd.in/gtRhpdfP #Java #OOP #SoftwareDevelopment #Programming
To view or add a comment, sign in
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development