LeetCode 3Sum Java Solution
This is a nice start, but there's some stylistic stuff that could be improved.
Generally it's a good idea to name variables for what their purpose is. Names like l1 are difficult to understand. This varies depending on the language, but in Java people tend to be explicit with their variable naming, preferring descriptive names over concise ones.
When declaring a data structure, convention in Java is to declare the type as the interface.
public boolean areDuplicates(ArrayList&lt;Integer&gt; first, ArrayList&lt;Integer&gt; second)

is more commonly written as
public boolean areDuplicates(List&lt;Integer&gt; first, List&lt;Integer&gt; second)

This is because List defines a set of behaviours that you want to have, and ArrayList defines how they are implemented. If someone has made a data structure with the exact same behaviour as an ArrayList, then you want your methods to support that data structure as well.
The format of the code in quite unusual for Java. I'd run your code through an autoformatter, which deals with all that stuff for you. Personally I use Eclipse's default one, but there's loads of choice out there.
This isn't a complete review, and it's mainly my opinion, so feel free to include or discard this advice.